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,因为如果我的手指在左上角附近开始移动,它几乎从我的手指下方开始,但是当我将手指从左上角移开时这条线开始增长得比我的移动快得多(快两倍),很快就越过视图的边界。另一方面,如果我开始手指在右下角附近移动,直到我越过图像中心向左上角移动时它才会显示。

UPD> 此外,我在 Imageview 上使用此属性:

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

1 回答 1

0

看来,您绘制的位图与 ImageView 的大小不同。因此,您使用事件坐标在位图上进行绘制,当显示位图时,由于该scaleType="fitCenter"属性,它会缩放到不同的大小。

于 2013-08-28T14:15:51.437 回答