在水平滚动视图中进行手指绘画
我正在组合我在 stackoverflow 和 android 开发工具包中找到的一些代码。我想将手指画画布放在可锁定的水平滚动视图中。然而,每当我尝试在水平方向上绘制时,滚动视图就会滚动而不是在画布上绘制。当我用 imageview 代替 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);
}
}
I am combining some pieces of code which I have found on stackoverflow and in the android development kit. I want to put the fingerpaint canvas within a lockable horizontalscrollview. However whenever I atempt to draw in a horizontal direction the scrollview scrolls rather than painting on the canvas. It did not have this problem when I had an imageview in the place of the custom view from fingerpaint. I think that perhaps the overriding of the onTouchEvent in both the custom lockableHorizontalScrollView and the custom drawingView may be at fault. I can provide further details and code if required.
Extracts from:
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);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是 xml 文件的排列问题以及覆盖错误的方法。该按钮需要放置在horizontalScrollView 之外。 lockableHorizontalScrollView 不应该重写 onTouchEvent 方法,而应该重写 onInterceptTouchEvent,代码如下;
This was a arrangement problem with the xml file as well as overriding the wrong method. The button needed to be placed outside of the horizontalScrollView. Instead of the lockableHorizontalScrollView overriding the onTouchEvent method it should have been overriding the onInterceptTouchEvent, the code to which follows;
我不明白您希望滚动行为如何工作:具体来说,系统如何区分滚动手势和绘画手势之间的区别。
但是,您可以通过阅读上一个问题来了解如何以编程方式启用和禁用滚动:
禁用 ScrollView 操作
I don't understand how you want the scroll behaviour to work: specifically, how the system is meant to tell the difference between a scroll gesture and a paint gesture.
However, you can find out how to programatically enable and disable scrolling by reading this previous question:
Disable ScrollView action