2012-06-01 4 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() всегда возвращался 0, значение для MotionEvent.ACTION_DOWN. Поэтому я переключился на прослушивание MotionEvent.ACTION_DOWN, который работает. Вид.

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я иду на масштаб изображения, если мои пальцы касаются одного из изображений, он переключает выбор, который может стать действительно раздражающим.

Я хотел бы быть в состоянии сделать один из двух вещей:

использовать OnClickListener но позволяет мой ScaleGestureDetector масштабировать изображения, даже если мои пальцы касаются изображений

или

Сделайте OnTouchListener работой с MotionEvent.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; 
} 
Смежные вопросы