MotionEvent とレイアウトが異なる場所の値を示しているようで、その理由がわかりません。次のようにイメージを定義します。
<ImageView
android:id="@+id/pic"
android:layout_width="17dp"
android:layout_height="17dp"
android:layout_marginLeft="72dp"
android:layout_marginTop="72dp"
android:src="@drawable/pic" />
これにより、密度が2.0であるため、テストしているエミュレーターのピクセル単位で(144、144)に画像が配置されます。ピクセルの位置は log.v で確認され、画像の親は単にレイアウトです。
onTouchListener があり、MotionEvent でタッチの位置を確認します。
Log.v("pixelsX", String.valueOf(event.getX()));
Log.v("pixelsY", String.valueOf(event.getY()));
XML で設定した画像の上と左側をクリックすると、160 以上の値が表示されますが、これは明らかに間違っています。クリックが画像のかなり前にある場合でも、これは 80+ の DP 位置に対応します。
クリック位置 image.setX(event.getX()) (setX/setY および params を使用して試行) に画像を追加しようとすると、画像はクリックの右下に約 40 ピクセル配置されます。画像に余分なパディングなどはありません。さまざまな画像を使用してみましたが、それらの間で一貫しています。画像の親は常にレイアウトであり、レイアウトは ontouchlistener に接続されています。
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_mine);
layout.setOnTouchListener(touch);
だから、なぜこの位置の違いがあるのか わかりません。