0

您好我正在尝试在用户触摸的区域放置一个图像视图。

使用简单地MotionEvent event 做并不是完整的解决方案。imageview.setX(event.getX())imageview.setY(event.getY())

我意识到这些是像素值,所以我尝试使用将事件值转换为与密度无关的值 (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, event.getX() , getResources() .getDisplayMetrics());

但这仍然没有给我与我触摸的位置匹配的坐标,当我尝试在这个位置显示图像视图时。

另外,当我希望坐标位于图像视图的中心时,我怀疑图像视图在这些坐标处绘制其左上角。

洞察力赞赏

4

1 回答 1

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。

于 2013-07-26T03:14:05.353 回答