当前位置: 代码迷 >> Android >> 在视图内正确移动imageview
  详细解决方案

在视图内正确移动imageview

热度:83   发布时间:2023-08-04 12:32:36.0

我在努力适当地移动图像视图。 我的布局在屏幕顶部,编辑文本下方,然后是带有我的图像视图的视图的下面都有一个linearLayout。 当我触摸图像时,它会落在屏幕上,自那以后我就可以控制它,将手指移到球开始处的位置,而不是球在屏幕上实际出现的位置。 我正在使用getRawX和getRawY(这些方法提供相对于屏幕的绝对坐标),我认为问题是图像出现在这些值上,但相对于其视图而不是屏幕。 我以为如果要总结图像视图所在视图上方的视图高度并将其减去getRawX值,它将得到固定,但是我看到LayoutParams的方法高度只会给我一个表示填充的常数父项,匹配父项并包装内容。 无论如何,它必须比这样做容易得多。

这是我的布局外观:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
 >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/buttonsLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/leftButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:text="LEFT" />

        <Button
            android:id="@+id/upButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:text="UP" />

        <Button
            android:id="@+id/downButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:text="DOWN" />

        <Button
            android:id="@+id/rightButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:text="RIGHT" />
    </LinearLayout>

    <EditText
        android:id="@+id/coordinatesTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <ImageView
        android:id="@+id/ballImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ball" />

</LinearLayout>

        ball.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            LayoutParams layoutParams = (LayoutParams) ball.getLayoutParams();
            switch (event.getAction()){

                case MotionEvent.ACTION_DOWN:
                    break;                         
                case MotionEvent.ACTION_UP:
                    break;                  
                case MotionEvent.ACTION_MOVE:

                    int x_cord = (int) event.getRawX();
                    int y_cord = (int) event.getRawY();
                    layoutParams.leftMargin = x_cord;
                    layoutParams.topMargin = y_cord;
                    ball.setLayoutParams(layoutParams);
                    break;

                default:
                    break;
            }

            return true;
        }
    });

这似乎是最好的解决办法是使用SurfaceHolder,就像它显示 。 易于管理!

  相关解决方案