2013-08-28 47 views
1

我在一个活动中有一个ImageView,其左上角坐标必须检索,因此我可以将图像视图分成5个触摸区域。我使用getLocationOnScreen获取这些坐标。Android中ImageView的左上角坐标显示不正确

X坐标很好,但Y坐标由于某种原因似乎有缺陷,总是有一个偏移量,它似乎指向窗口的顶部(通过启用指针接触开发工具进行验证)。

下面是活动代码:

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" /> 

这是我面临的问题的截图:http://puu.sh/4d1LJ.jpg

正如你可以看到,X坐标很好,但Y坐标显示的位置是http://puu.sh/4d1OJ.jpg

任何帮助表示赞赏,我坦率地在一个损失为什么发生这种情况。

回答

1

终于找到了什么事,在Y轴偏移是由于这两个状态栏和动作条的高度是考虑到这样的事实。所以在我的情况下,偏移量为108(ActionBar为75,状态栏为33)。编写两个函数来计算这些高度并从getRawY()返回的值中减去它们可以解决这个问题。

0

取而代之的是

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(); 
+0

这是我使用getX()时得到的结果。我已经尝试了几乎所有代码组合来尝试获取坐标,但到目前为止总是存在Y的偏移量。 – Hav3n