我正在组合一些我在stackoverflow和android开发工具包中找到的代码。我想把指画画布放在一个可锁定的水平滚动视图中。但是,每当我试图在水平方向上绘制时,滚动视图都会滚动,而不是在画布上绘制。当我用一个图像视图代替了fingerpaint的自定义视图时,它就没有这个问题了。我认为可能是在自定义lockableHorizontalScrollView和自定义drawingView中对onTouchEvent的覆盖造成的。我可以提供进一步的细节和代码,如果需要。
摘录自:
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;
}
LockableHorizontalScrollView.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);
}
}
发布于 2011-05-24 04:33:03
这是xml文件的一个排列问题,并且覆盖了错误的方法。该按钮需要放在horizontalScrollView的外面。而不是lockableHorizontalScrollView重写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;
}
发布于 2011-05-22 19:45:39
https://stackoverflow.com/questions/6090163
复制相似问题