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 に答える