单击 Android 屏幕上的 ImageView
Click on ImageView on Android screen
我的问题是单击 imageview 并知道在图像(由 imageview 调整大小)上单击的位置。
我目前的算法是:
在ImageView的onTouch方法中,获取X和Y位置MotionEvent 并做数学运算
int realX = (X / this.getWidth()) * bitmapWidth;
int realY = (Y / this.getHeight()) * bitmapHeight;
其中 bitpmapWidth 和 bitmapHeight 来自原始位图。
谁能帮帮我?
差不多吧,数学应该有点不同。另请记住,ImageView 的 getHeight() 和 getWidth() 在 onCreate 期间将为 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;
}
});
我的问题是单击 imageview 并知道在图像(由 imageview 调整大小)上单击的位置。
我目前的算法是:
在ImageView的onTouch方法中,获取X和Y位置MotionEvent 并做数学运算
int realX = (X / this.getWidth()) * bitmapWidth;
int realY = (Y / this.getHeight()) * bitmapHeight;
其中 bitpmapWidth 和 bitmapHeight 来自原始位图。
谁能帮帮我?
差不多吧,数学应该有点不同。另请记住,ImageView 的 getHeight() 和 getWidth() 在 onCreate 期间将为 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;
}
});