2011-07-14 69 views
9

我有滾動TextViewGallery 當我使onTouchEvent()TextView,我不能瀏覽throught的Gallery ,如果我禁用onTouchEvent(),我可以滾動左右throught的Gallery 但不能向下滾動到TextView的TextView在畫廊

我試着做花樣,像發送相同MotionEvent()GalleryTextView .. 任何想法如何解決呢?

+0

@Nathan圖,我會盡力做一個樣品。 –

回答

0

insted的onTouch事件你爲什麼不使用的onclick事件的TextView裏畫廊onMotionEvent

+0

我沒有處理'Click'事件,我正在處理'Touch'事件! –

0

嘗試onTouch事件來設置return false英寸

0

有可能是TextView和/或GalleryListView如果您正在使用一個採取重點遠離或因此滾動能力,使得它不能上下滾動,請嘗試刪除可獲得焦點的TextView的和藝術畫廊和看看這是否有幫助。那麼你應該仍然可以使用你的touchEvents ......只是一個想法,不知道它是否會真正解決問題。希望我能有更多的幫助。

0

創建一個擴展容器佈局幷包含可滾動TextView的自定義視圖。將其用作您的圖庫項目。

1

嘿,你一定要試試這個代碼,它會幫助你在你的問題

float oldx; 
float oldy; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    boolean result = false; 
    if(event.getAction() == MotionEvent.ACTION_DOWN) { 
     result = super.onTouchEvent(event); 
    } else if (event.getAction() == MotionEvent.ACTION_UP) { 
     result = super.onTouchEvent(event); 
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) { 
     /** 
     * Condition :: Math.abs(oldx - event.getX()) > 10 will check weather user had drag horizontal or vertical. 
     * You can change value 10 according to your requirement 
     */ 
     if(Math.abs(oldx - event.getX()) > 10) { 
      result = super.onTouchEvent(event); 
     } else { 
      result = true; 
     } 
    } 
    oldx = event.getX(); 
    oldy = event.getY(); 
    return result; 
} 
+0

對不起,這沒有奏效! –

1

我的回答:

public class CustomGallery extends Gallery { 

    public CustomGallery(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public CustomGallery(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomGallery(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     float r = (velocityX > 0 ? Math.min(800f, velocityX) : Math.max(-800f, velocityX)); 
     return super.onFling(e1, e2, r, velocityY); 
    } 

    float oldX, oldY; 
    boolean isDown = false; 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     int action = ev.getAction(); 
     switch (action) { 
      case MotionEvent.ACTION_DOWN: 
       oldX = ev.getX(); 
       oldY = ev.getY(); 
       isDown = true; 
       return super.onInterceptTouchEvent(ev); 

      case MotionEvent.ACTION_MOVE: 
       if (isDown) { 
        float diffX = Math.abs(ev.getX() - oldX); 
        float diffY = Math.abs(ev.getY() - oldY) + 20f; 
        if (diffY > diffX) { 
         return false;// handled by TextView 
        } 
       } 
       return true;// handled by Gallery 

      case MotionEvent.ACTION_UP: 
       isDown = false; 
       return super.onInterceptTouchEvent(ev); 

      default: 
       return super.onInterceptTouchEvent(ev); 
     } 
    } 

} 

感謝@teepee爲解決方案提供了一個巨大的提示:d