Я пытаюсь определить, касается ли пользователь нарисованного растрового изображения в ImageView ...
mCanvasImageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
//get coordinates
float x = event.getX();
float y = event.getY();
//calculate Bitmap's drawn width and height
int drawnBitmapWidth;
int drawnBitmapHeight;
int imageViewWidth = mCanvasImageView.getWidth();
int imageViewHeight = mCanvasImageView.getHeight();
int bitmapWidth = mCanvasImageView.getDrawable().getIntrinsicWidth();
int bitmapHeight = mCanvasImageView.getDrawable().getIntrinsicHeight();
if (imageViewHeight * bitmapWidth <= imageViewWidth * bitmapHeight) {
drawnBitmapWidth = bitmapWidth * imageViewHeight / bitmapHeight;
drawnBitmapHeight = imageViewHeight;
} else {
drawnBitmapHeight = bitmapHeight * imageViewWidth / bitmapWidth;
drawnBitmapWidth = imageViewWidth;
}
//determine if touch is in active area
if ( y > (0 + drawnBitmapHeight/2) && y < (imageViewHeight - drawnBitmapHeight/2) )
Log.d(TAG, "IN ACTIVE Y REGION");
else
Log.d(TAG, "NOT IN ACTIVE Y REGION");
//width is 1080, height is 1920
//bitmap drawn width is 1080, height is 1080
//active start 540 active end 1380
return true;
}
});
}
Все значения рассчитаны правильно. ImageView заполняет экран и имеет размер 1080x1920. Растровое изображение выравнивается по центру в ImageView и имеет размер 1080x1080. Таким образом, активная область (в пересчете на y) составляет от 540 до 1380. События касания в этом диапазоне правильно определены как находящиеся в активной области. Однако ...
Когда я касаюсь, создается впечатление, что активная область начинается после растрового изображения и заканчивается перед ним. Я также заметил, что касание абсолютной верхней или нижней части экрана не возвращает ни 0, ни 1920, но аналогично смещает координаты y. Исходя из этого, я предполагаю, что getY () (и getRawY ()) как-то не точны, но я не могу определить, почему. Еще одно замечание: панель действий скрыта, а приложение полноэкранное без строки состояния.