我尝试使用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"
答案 0 :(得分:0)
看来,您绘制的位图与ImageView的大小不同。因此,您使用事件坐标在位图上绘制,并且在显示位图时,由于scaleType="fitCenter"
属性,它会缩放到不同的大小。