我正在使用 Android Studio 3 开发一个应用程序。这个应用程序有一个平面图图像和上面的网格。两者都通过 https://github.com/chrisbanes/PhotoView 使用 Canvas 添加到 PhotoView 中。
场景1:不放大, 当用户单击网格的某个单元格时,单击的单元格将被涂成黑色。这个没有问题。
场景2:放大后, 当用户单击网格的某个单元格时,该单元格将被绘制为黑色但不同的单元格,而不是单击的单元格。
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
int column = (int) (event.getX() / cellWidth);
int row = (int) (event.getY() / cellHeight);
if (column < numColumns && row < numRows) {
cellChecked[column][row] = !cellChecked[column][row];
drawGrid();
}
}
return false;
}
所以,问题出在场景 2 上。 PhotoView 放大后,单击的单元格应该被涂成黑色。
您可以使用此
Kotlin
代码:
val displayRect = photoView.displayRect
val relativeX = ((event.x - displayRect.left) / displayRect.width())
val relativeY = ((event.y - displayRect.top) / displayRect.height())