1

setOnTouchListener() メソッドを使用して、内部にビットマップがある ImageView で指を動かして線を引こうとしています。

これがコードです。

@Override
public boolean onTouch(View view, MotionEvent event) {
    int action = event.getAction();
    switch (action) {
        case MotionEvent.ACTION_DOWN:
            downx = event.getX();
            downy = event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            upx = event.getX();
            upy = event.getY();
            canvas.drawLine(downx, downy, upx, upy, paint);
            photoView.invalidate();
            break;
        case MotionEvent.ACTION_UP:
            canvas.drawBitmap(notChangedRotatedBitmap, new Matrix(), paint);
            photoView.invalidate();
            break;
        case MotionEvent.ACTION_CANCEL:
            break;
        default:
            break;
    }
    return true;
}

問題は、イベント オブジェクトによって返される座標が 2 倍になっているように見えることです。これは、左上隅近くで指を動かし始めると、ほぼ指の下から動き始めるためです。しかし、指を左上隅から離すと離れます。線は私の動きよりもはるかに速く伸び始め (2 倍近く速く)、すぐにビューの境界を越えます。一方、右下隅の近くで指を動かし始めると、左上隅に向かって移動する画像の中心を横切るまで表示されません。

UPD>さらに、Imageviewでこの属性を使用します:

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitCenter"
4

1 に答える 1