2013-06-19 391 views
4

我正在实现一个应用程序,用于在移动屏幕上图像的位置时获取图像视图的正确x和y位置以及图像视图的x和y坐标。当我运行应用程序,当我移动我的图像视图时,它只会得到0和1.有没有办法找出x和y的位置?如何获取Android中imageview的所有x和y坐标?

这里是我的主活动类:

public class MainActivity extends Activity{ 
     static final int NONE = 0; 

     static final int DRAG = 1; 

     static final int ZOOM = 2; 

     int mode = NONE; 

     Matrix matrix = new Matrix(); 

     Matrix savedMatrix = new Matrix(); 

     PointF start = new PointF(); 

     PointF mid = new PointF(); 

     float oldDist = 1f; 

     int[] location = new int[4]; 

     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     final ImageView image = (ImageView) findViewById(R.id.ImageViewOne); 

     final Bitmap icon = BitmapFactory.decodeResource(this.getResources(), 
       R.drawable.yellowrose); 

     image.setImageBitmap(icon); 




     image.setOnTouchListener(new View.OnTouchListener() 
     { 

      public boolean onTouch(View v, MotionEvent event) 
      { 
       final ImageView view = (ImageView) v; 


       switch (event.getAction() & MotionEvent.ACTION_MASK) 
       { 

       case MotionEvent.ACTION_DOWN: 

        savedMatrix.set(matrix); 

        start.set(event.getX(), event.getY()); 

        mode = DRAG; 
        System.out.println("mode = drag"); 
        RectF r = new RectF(); 
        matrix.mapRect(r); 

        break; 

       case MotionEvent.ACTION_UP: 

       case MotionEvent.ACTION_POINTER_UP: 
        mode = NONE; 
        System.out.println("mode = none = " + mode); 

        break; 

       case MotionEvent.ACTION_MOVE: 

        if (mode == DRAG) 
        { 
         matrix.set(savedMatrix); 
         matrix.postTranslate(event.getX() - start.x, 
           event.getY() - start.y); 
        } 

        else if (mode == ZOOM) 
        { 
         float newDist = spacing(event); 
         if (newDist > 10f) 
         { 
          matrix.set(savedMatrix); 
          float scale = newDist/oldDist; 
          System.out.println("scale " + scale); 
          matrix.postScale(scale, scale, mid.x, mid.y); 
         } 
        } 
        break; 



       case MotionEvent.ACTION_POINTER_DOWN: 
        oldDist = spacing(event); 

        if (oldDist > 10f) 
        { 
         savedMatrix.set(matrix); 
         midPoint(mid, event); 

         mode = ZOOM; 
         System.out.println("mode " + mode); 
        } 
        break; 

       } 

       // Perform the transformation 
       view.setImageMatrix(matrix); 
       return true; 
      } 
     }); 
    } 

    private float spacing(MotionEvent event) 
    { 
     float x = event.getRawX() - event.getRawX(); 
     System.out.println("spacing x" + x); 

     float y = event.getRawY() - event.getRawY(); 
     System.out.println("spacing y" + y); 

     return FloatMath.sqrt(x * x + y * y); 

    } 

    private void midPoint(PointF point, MotionEvent event) 
    { 
     float x = event.getRawX() + event.getRawX(); 
     System.out.println("midpoint x" + x); 

     float y = event.getRawY() + event.getRawY(); 
     System.out.println("midpoint y" + y); 

     point.set(x/2, y/2); 

    } 


} 
+0

您需要的x和y imageview的坐标相对于什么?屏幕还是父母? – gunar

+0

我想要图像视图的x和y坐标来定位另一个图像视图。 – tazeenmulani

+0

我想要第一个图像视图和第二个图像视图的x和y坐标,以便当我在第二个图像上找到第一个图像并绑定后,将这两个图像发送到SD卡上的按钮单击。 – tazeenmulani

回答

5

我使用View.getLocationOnScreen(int[])获得视图相对于其父/屏幕上的X和Y:

int[] posXY = new int[2]; 
myView.getLocationOnScreen(posXY); 
int x = posXY[0]; 
int y = posXY[1]; 
+0

无论何时移动到图像,x = 0和y = 76。 – tazeenmulani

+0

@gunar,myView.getLocationOnScreen(posXY);这个方法给了我0,0在我的数组,为什么是这样的,我想做翻译动画,但我无法获得任何视图的坐标。帮助http://stackoverflow.com/questions/28622966/not-able-to-get-position-for-view-for-translate-animation-in-android –

相关问题