Java Android中ImageView的左上角坐标显示不正确
我在活动中有一个ImageView,我必须检索它的左上角坐标,以便将ImageView划分为5个触摸区域。我使用GetLocationOn屏幕获取这些坐标 X坐标很好,但是Y坐标由于某种原因似乎有故障,总是有偏移,并且它似乎指向窗口的顶部(通过在开发工具中启用指针触摸来验证这一点) 以下是活动代码:Java Android中ImageView的左上角坐标显示不正确,java,android,imageview,android-imageview,Java,Android,Imageview,Android Imageview,我在活动中有一个ImageView,我必须检索它的左上角坐标,以便将ImageView划分为5个触摸区域。我使用GetLocationOn屏幕获取这些坐标 X坐标很好,但是Y坐标由于某种原因似乎有故障,总是有偏移,并且它似乎指向窗口的顶部(通过在开发工具中启用指针触摸来验证这一点) 以下是活动代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); th
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
amslerView = (ImageView) findViewById(R.id.amsler_grid);
locText = (TextView) findViewById(R.id.locationLabel);
amslerView.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN :
startX = (int) event.getRawX();
startY = (int) event.getRawY();
int[] loc = new int[2];
amslerView.getLocationOnScreen(loc);
Log.i("Screen Location of View", "X:" + loc[0] + "\t Y:" + loc[1]);
locText.setText("Location " + startX + " " + startY + "Screen View Location is " + "X:" + loc[0] + "\t Y:" + loc[1]);
break;
case MotionEvent.ACTION_UP :
endX = (int) event.getX();
endY = (int) event.getY();
// locText.setText("End Location " + endX + "\t" +
// endY);
break;
}
return true;
}
});
}
以下是XML布局:
<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"
android:orientation="vertical"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/amsler_grid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:adjustViewBounds="true"
android:contentDescription="Amsler Grid"
android:padding="0dp"
android:scaleType="center"
android:src="@drawable/amsler_boundary" />
这是我面临的问题的截图:
如您所见,X坐标很好,但Y坐标显示了位置
感谢您的帮助,坦率地说,我不知道为什么会发生这种情况。而不是这样
case MotionEvent.ACTION_DOWN :
startX = (int) event.getRawX();
startY = (int) event.getRawY();
试试这个
case MotionEvent.ACTION_DOWN:
//Get X, Y coordinates from the ImageView
X = (int) event.getX();
Y = (int) event.getY();
而不是这个
case MotionEvent.ACTION_DOWN :
startX = (int) event.getRawX();
startY = (int) event.getRawY();
试试这个
case MotionEvent.ACTION_DOWN:
//Get X, Y coordinates from the ImageView
X = (int) event.getX();
Y = (int) event.getY();
最终发现了问题所在,Y偏移是由于同时考虑了状态栏和操作栏的高度。所以在我的例子中,偏移量是108(ActionBar为75,Status Bar为33)。编写两个函数来计算这些高度,并从getRawY()返回的值中减去它们,解决了这个问题。最终找到了问题所在,Y偏移是由于同时考虑了状态栏和操作栏的高度。所以在我的例子中,偏移量是108(ActionBar为75,Status Bar为33)。编写两个函数来计算这些高度,并从getRawY()返回的值中减去它们,解决了这个问题。这就是我使用getX()时得到的结果。我尝试了几乎所有的代码组合来尝试获取坐标,但到目前为止,Y中始终存在偏移量。这是我使用getX()时得到的结果。我尝试了几乎所有的代码组合,试图得到坐标,但到目前为止,总是有偏移量在Y中。