2012-06-01 163 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的原因是因爲我總是回覆錯誤,所以我沒有消費這個事件。我與此去,使其工作像我期望

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