2013-08-28 3 views
1

У меня есть ImageView в действии, верхние левые координаты которого я должен получить, поэтому я могу разделить изображение в 5 сенсорных зон. Я использую getLocationOnScreen для получения этих координат.Вверху слева Координаты ImageView в Android отображаются некорректно

Координата X хорошо, однако по какой-то причине координата Y кажется неисправной, всегда есть смещение, и оно, кажется, указывает на верхнюю часть окна (проверено это путем включения указателя в инструменты dev).

Вот код вида деятельности:

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 смещение связано с тем, что высота как строки состояния и ActionBar принимаются во внимание , Так что в моем случае смещение было 108 (75 для ActionBar и 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