2013-08-27 43 views
1

我尝试使用setOnTouchListener()方法在内部位图上用手指在ImageView上移动一条线。在OnTouchListener中的画布上绘图

这是代码。

@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; 
} 

的问题是,它lookes像该事件对象返回的坐标乘以2,因为如果我开始在它附近开始几乎低于我的手指左上角我的手指移动,但是当我移动手指离开左上角时,线条开始变得快得多,然后我的移动速度快了近两倍,并且很快越过视图的边界。另一方面,如果我开始我的手指移动到右下角附近,它只是在我穿过图像的中心向左上角移动时才显示。

UPD> 此外,我用这个属性上的ImageView:

android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="fitCenter" 
+0

帆布是你的活动领域?如何初始化它? – Michael

+0

我初始化画布在私人领域帆布画布=新帆布();然后canvas.setBitmap(rotatedBitmap);触摸开始。真的这个setBitmap的行跟在提供的代码的第三行之后。 – TpoM6oH

回答

0

看来,你画的位图不是尺寸与ImageView的相同。因此,您使用事件坐标在位图上进行绘制,并且在显示位图时,由于属性为scaleType="fitCenter",所以会缩放到不同的大小。