2011-05-22 144 views
0

我結合了我在stackoverflow和android開發工具包中找到的一些代碼段。我想把fingerpaint畫布放在可鎖定的horizo​​ntalscrollview中。然而,無論何時我試圖在水平方向上繪製,滾動視圖都會滾動而不是在畫布上繪畫。當我在fingerpaint的自定義視圖中使用imageview時,它沒有這個問題。我認爲可能在自定義lockableHorizo​​ntalScrollView和自定義drawingView中重寫onTouchEvent可能是錯誤的。如有需要,我可以提供更多詳細信息和代碼。horizo​​ntalscrollview內的fingerpaint

提取物來源:

drawingView.java

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      touch_start(x, y); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      touch_move(x, y); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_UP: 
      touch_up(); 
      invalidate(); 
      break; 
    } 
    return true; 
} 

LockableHorizo​​ntalScrollView.java

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // if we can scroll pass the event to the superclass 
      if (mScrollable) return super.onTouchEvent(ev); 
      // only continue to handle the touch event if scrolling enabled 
      return mScrollable; // mScrollable is always false at this point 
     default: 
      return super.onTouchEvent(ev); 
    } 
} 

回答

1

這是一個安排問題,XML文件以及覆蓋錯誤的方法。該按鈕需要放置在horizo​​ntalScrollView之外。而不是lockableHorizo​​ntalScrollView重寫onTouchEvent方法,它應該重寫onInterceptTouchEvent,後面的代碼;

public class LockableHorizontalScrollView extends HorizontalScrollView{ 

public LockableHorizontalScrollView(Context context, AttributeSet attrset) { 
    super(context, attrset); 
} 

// true if we can scroll (not locked) 
// false if we cannot scroll (locked) 
private boolean mScrollable = true; 

public void setIsScrollable(boolean scrollable) { 
    mScrollable = scrollable; 
} 

public boolean getIsScrollable() { 
    return mScrollable; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    if (mScrollable) return super.onTouchEvent(ev); 
    else return false; 
} 
0

我不明白你怎麼想的滾動行爲工作:具體而言,系統如何旨在說明滾動手勢和繪畫手勢之間的區別。

但是,你可以找到如何編程啓用和通過閱讀這篇先前的問題禁用滾動:

Disable ScrollView action

+0

您所包含的源代碼看起來有點幫助,但現在繪製組件只會在放棄之前在水平方向上繪製小部分。我想還有其他的手勢需要考慮。滾動應在我正在繪畫時鎖定,然後當我單擊按鈕時,應該恢復滾動行爲。 – 2011-05-22 20:09:37

+0

看起來我也可能必須重寫onInterceptTouchEvent。我會盡力讓我的頭靠近它。這是我找到的一個鏈接; http://stackoverflow.com/questions/2646028/android-horizo​​ntalscrollview-within-scrollview-touch-handling – 2011-05-23 22:36:52

相關問題