2012-06-01 3 views
0

사용자가 내 서버에 이미지를 업로드 할 수있는 Android 앱을 개발 중입니다. 선택 화면에서 핀치를 사용하여 이미지를 확대/축소 할 수있게 한 다음 이미지를 눌러 선택합니다. 나는 그것을 구현하면서 두 가지 문제에 부딪쳤다.Android 확장 및 터치 문제

첫 번째 문제는 이미지를 클릭했을 때를 감지하기 위해 OnClickListener을 사용하는 동안 발생했습니다. 내 손가락이 이미지 위에있는 한 이미지를 위 또는 아래로 조정할 수 없었습니다. 나는 이런 식으로 구현 :

setOnClickListener(new OnClickListener() 
{ 
    public void onClick(View arg0) 
    { 
     ToggleSelection(); 
     invalidate(); 
    } 
}); 

내가 그들을 여전히 심지어 이미지를 통해 자신의 손가락으로 이미지를 확장 할 수 있기를 원하기 때문에, 나는 나의 두 번째 방법으로 이동하기로 결정했다. 대신 OnTouchListener을 추가했습니다.

setOnTouchListener(new OnTouchListener() 
{ 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     int i = event.getAction(); 
     Log.d("TouchInfo123","Event action: " + i); 
     switch(i & MotionEvent.ACTION_MASK) 
     { 
     case MotionEvent.ACTION_UP: 
     { 
      ToggleSelection(); 
      invalidate(); 
      break; 
     } 
     } 
     return false; 
    } 
}); 

그럼 난 event.getAction() 항상 MotionEvent.ACTION_DOWN를 들어, 값을 0을 반환 한 것으로 나타났습니다. 그래서 나는 작동하는 MotionEvent.ACTION_DOWN을 듣기로 바꿨다. 거의.

내가 지금 실행하고있는 문제는 이미지 크기를 조절할 때 손가락이 이미지 중 하나를 터치하면 정말 귀찮아 질 수있는 선택을 토글하는 것입니다.

내가 할 수 있도록하고 싶습니다

두 가지 중 하나를

OnClickListener를 사용하지만 내 손가락이 이미지를 터치하는 경우 내 ScaleGestureDetector도 이미지를 확장 할 수

또는

OnTouchListenerMotionEvent.ACTION_UP과 함께 사용하도록 설정하여 터치 이벤트가 발생하면 크기가 조정되지 않는다는 것을 알고 있어야합니다.

제안 사항?

답변

0

이 문제를 해결할 수있었습니다. MotionEvent.ACTION_UP을 얻을 수 없었던 이유는 내가 항상 false를 반환했기 때문에 이벤트를 소비하지 않았기 때문입니다. 나는 이걸로 예상대로 작동하게했다.

boolean mouseDown = false; 

public boolean onTouchEvent(MotionEvent event) 
{ 
    switch(event.getAction() & MotionEvent.ACTION_MASK) 
    { 
    case MotionEvent.ACTION_UP: 
    { 
     if(mouseDown) 
     { 
      ToggleSelection(); 
      invalidate(); 
      mouseDown = false; 
     } 
     break; 
    } 
    case MotionEvent.ACTION_OUTSIDE: 
    case MotionEvent.ACTION_CANCEL: 
    case MotionEvent.ACTION_POINTER_DOWN: 
    case MotionEvent.ACTION_POINTER_UP: 
    { 
     mouseDown = false; 
     break; 
    } 
    case MotionEvent.ACTION_DOWN: 
    { 
     mouseDown = true; 
     return true; 
    } 
    } 
    return false; 
}