2013-08-27 3 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; 
} 

문제는 이벤트 객체에 의해 반환 된 좌표가 2를 곱한처럼 나는 거의 내 손가락 아래 시작 왼쪽 상단 모서리 근처 내 손가락 이동을 시작하면 있기 때문에, lookes 것입니다,하지만 난 내를 이동할 때 손가락이 왼쪽 상단 모서리에서 멀어지면 선이 훨씬 빨리 커지고 내 움직임이 (약 2 배 빨라짐) 곧 뷰의 경계를 넘어갑니다. 반면에 오른쪽 아래 모서리 근처에서 손가락을 움직이면 왼쪽 상단 모서리쪽으로 움직이는 이미지의 중심을 교차 할 때까지는 표시되지 않습니다.

UPD> 게다가,이 이미지 뷰에 속성을 사용

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

캔버스가 당신의 활동 분야입니까? 어떻게 초기화합니까? – Michael

+0

필드에서 캔버스를 초기화합니다. Canvas canvas = new Canvas(); 그런 다음 canvas.setBitmap (rotatedBitmap); 터치 시작. 실제로 setBitmap을 사용하는이 줄은 제공된 코드의 세 번째 줄 다음에 나옵니다. – TpoM6oH

답변

0

보인다, 당신이 그리는 비트 맵은 이미지 뷰와 동일한 크기 아니라고. 따라서 이벤트 좌표를 사용하여 비트 맵에 페인트하면 비트 맵이 표시 될 때 scaleType="fitCenter" 속성으로 인해 다른 크기로 조정됩니다.