首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >水平滚动视图中的指点绘制

水平滚动视图中的指点绘制
EN

Stack Overflow用户
提问于 2011-05-23 03:18:02
回答 2查看 1K关注 0票数 0

我正在组合一些我在stackoverflow和android开发工具包中找到的代码。我想把指画画布放在一个可锁定的水平滚动视图中。但是,每当我试图在水平方向上绘制时,滚动视图都会滚动,而不是在画布上绘制。当我用一个图像视图代替了fingerpaint的自定义视图时,它就没有这个问题了。我认为可能是在自定义lockableHorizontalScrollView和自定义drawingView中对onTouchEvent的覆盖造成的。我可以提供进一步的细节和代码,如果需要。

摘录自:

drawingView.java

代码语言:javascript
代码运行次数:0
运行
复制
@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

代码语言:javascript
代码运行次数:0
运行
复制
@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);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-24 12:33:03

这是xml文件的一个排列问题,并且覆盖了错误的方法。该按钮需要放在horizontalScrollView的外面。而不是lockableHorizontalScrollView重写onTouchEvent方法,它应该重写onInterceptTouchEvent,代码如下;

代码语言:javascript
代码运行次数:0
运行
复制
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
EN

Stack Overflow用户

发布于 2011-05-23 03:45:39

我不明白你希望滚动行为如何工作:具体地说,系统是如何区分滚动手势和绘画手势的。

但是,您可以通过阅读前面的问题来了解如何以编程方式启用和禁用滚动:

Disable ScrollView action

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6090163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档