在OnTouchListener上的画布上绘图

时间:2013-08-27 17:49:51

标签: android imageview android-canvas

我尝试使用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"

1 个答案:

答案 0 :(得分:0)

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