OnTouch imageview创建过低

时间:2018-01-09 09:34:01

标签: java android ontouchlistener ontouchevent custom-view

我的主Activity中有一个自定义的floorplanView类。此自定义视图占用了大约一半的屏幕空间。我试图简单地创建一个星形图像并将其放置在平面图上onTouch。但是,出于某种原因,这似乎将图像放在我触摸的位置下方(我尝试了一些变化而无法解决)。

 public class FloorplanView extends RelativeLayout {

    public FloorplanView(Context context, AttributeSet attrs) {
        super(context, attrs);

        SCROLL_THRESHOLD = getResources().getDimensionPixelSize(R.dimen.margin5);
        setClipChildren(false);
        setOnTouchListener(new FloorplanTouchListener());
    }

    public class FloorplanTouchListener implements View.OnTouchListener {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    posX = event.getRawX() - v.getX();
                    posY = event.getRawY() - v.getY();
                    break;

                case MotionEvent.ACTION_UP:
                    ImageView img = new ImageView(getContext());
                    img.setOnTouchListener(new FlagTouchListener());
                    img.setBackground(getResources().getDrawable(android.R.drawable.btn_star));
                    img.setX(event.getRawX()); //Used posX/Y without success
                    img.setY(event.getRawY());
                    addView(img);
                    break;
            }

            return true;
        }
    }
}

除此之外,有没有办法通过扩展一个relativeLayout来设置我的自定义类的边界,这样当我拖动和移动我的图像(设置和工作)时,它不会超出Floorplanview自定义类。 / p>

修改 父Activity类XML

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.fcs_systems.inspector.FloorplanActivity">

    <TextView
        android:id="@+id/txtFloorplanName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Floorplan Name"
        android:visibility="gone"/>

    <com.fcs_systems.inspector.FloorplanView
        android:id="@+id/floorplanView"
        android:background="@color/fcs_red"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

根据文件,

  

float getRawX():返回此事件的原始原始X坐标。对于屏幕上的触摸事件,在调整包含窗口和视图之前,这是事件在屏幕上的原始位置。    (来源:https://developer.android.com/reference/android/view/MotionEvent.html#getRawX()

这就是为什么getRawX()getRawY()似乎将图片放在比你点击的位置更低的原因。 您应该只使用MotionEvent上的getX()getY()方法。

至于你的图像走出RelativeLayout,这将取决于两件事:

  1. 将您的图片添加到RelativeLayout(不确定您的实际addView(img);是做什么)

  2. 确保您的RelativeLayout没有启用https://developer.android.com/reference/android/view/ViewGroup.html#setClipChildren(boolean)

  3. 这将确保您的图片属于RelativeLayout容器,并且在移出图像时不会被绘制。