单击Android屏幕上的ImageView

时间:2017-03-06 20:16:33

标签: android bitmap imageview ontouch

我的问题是点击imageview并知道图像的位置(通过imageview调整大小),我点击。

我目前的算法是:

在ImageView的 onTouch 方法上,获取MotionEvent的 X Y 位置并进行数学运算

int realX = (X / this.getWidth()) * bitmapWidth;
int realY = (Y / this.getHeight()) * bitmapHeight;

其中bitpmapWidth和bitmapHeight来自原始位图。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

几乎是正确的,数学应该有点不同。另请注意,在onCreate期间,ImageView的getHeight()和getWidth()将为0,我已使用此答案中的信息getWidth() and getHeight() of View returns 0一旦可用,就使用获取宽度和高度

    iv = (ImageView) findViewById(R.id.img);

    iv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            iv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            xScaleFactor = iv.getWidth() / originalBitmapWidth;
            yScaleFactor = iv.getHeight() / originalBitmapHeight;

            Log.v(TAG, "xScaleFactor:" + xScaleFactor + " yScaleFactor:" + yScaleFactor);
        }
    });

    iv.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            int touchX = (int) event.getX();
            int touchY = (int) event.getY();

            int realX = touchX / xScaleFactor;
            int realY = touchY / yScaleFactor;

            Log.v(TAG, "realImageX:" + realX + " realImageY:" + realY);
            return false;
        }
    });