我正在组合我在stackoverflow和android开发工具包中找到的一些代码片段。我想将指纹画布放在可锁定的横向视图中。但是,每当我尝试在水平方向上绘制时,scrollview都会滚动而不是在画布上绘画。当我在fingerpaint的自定义视图的位置有一个imageview时,它没有这个问题。我想也许在自定义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);
}
}
答案 0 :(得分:1)
这是xml文件的排列问题以及重写错误的方法。该按钮需要放在horizontalScrollView之外。而不是覆盖onTouchEvent方法的lockableHorizontalScrollView,它应该覆盖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;
}
答案 1 :(得分:0)
我不明白你希望滚动行为如何工作:具体来说,系统如何表示滚动手势和绘画手势之间的区别。
但是,您可以通过阅读上一个问题找到如何以编程方式启用和禁用滚动: