您好我正在尝试在用户触摸的区域放置一个imageview。
使用MotionEvent event
简单地执行imageview.setX(event.getX())
和imageview.setY(event.getY())
并不是完整的解决方案。
我意识到这些是像素值,因此我尝试使用(int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, event.getX() , getResources()
.getDisplayMetrics());
将事件值转换为与密度无关的值
但当我尝试在这个位置显示imageview时,这仍然不会给我与我触摸的位置匹配的坐标。
另外,我怀疑当我希望坐标位于imageview的中心时,imageview在这些坐标处绘制其左上角。
洞察力赞赏
答案 0 :(得分:1)
您很可能希望执行以下操作:
如果您尝试在缩放图像的触摸事件点上找到点:
public static float[] getPointerCoords(ImageView view, MotionEvent e)
{
final int index = e.getActionIndex();
final float[] coords = new float[] { e.getX(index), e.getY(index) };
Matrix matrix = new Matrix();
view.getImageMatrix().invert(matrix);
matrix.postTranslate(view.getScrollX(), view.getScrollY());
matrix.mapPoints(coords);
return coords;
}
public boolean onTouch(View v, MotionEvent event)
{
float[] returnedXY = getPointerCoords((ImageView) v, event);
imageView.setLeft(returnedXY[0] + (imageView.getWidth() /2));
imageView.setTop(returnedXY[1] + (imageView.getHeight() /2));
}
如果没有,只需使用events.getX和getY。您可能需要使用事件的getRawX和getRawY。