2013-08-27 71 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",所以會縮放到不同的大小。