android:根据用户触摸的位置显示图像(api 11+)

时间:2013-07-26 02:57:54

标签: android drag-and-drop imageview coordinates pixels

您好我正在尝试在用户触摸的区域放置一个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在这些坐标处绘制其左上角。

洞察力赞赏

1 个答案:

答案 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。