2011-05-22 87 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

相关问题