简体   繁体   English

如何在Android中获取imageview的所有x和y坐标?

[英]How to get all x and y coordinates of an imageview in Android?

I am implementing an app for getting the correct x and y location of the image-view and x and y coordinates of an image-view when I move the position of images on the screen. 我正在实现一个应用程序,用于在我移动屏幕上的图像位置时获取图像视图的正确x和y位置以及图像视图的x和y坐标。 When I run the app and when I move my image-view it will get only 0 and 1. Is there a way for find out the x and y location? 当我运行应用程序时,当我移动我的图像视图时,它将只获得0和1.有没有办法找出x和y位置?

Here is my Main-activity class: 这是我的主要活动类:

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);

    }


 }

I am using View.getLocationOnScreen(int[]) to get X and Y of a view relative to its parent/screen: 我正在使用View.getLocationOnScreen(int [])来获取相对于其父/屏幕的视图的X和Y:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM