在horizo​​ntalscrollview中的fingerpaint

时间:2011-05-22 19:18:02

标签: android paint ontouchevent horizontalscrollview

我正在组合我在stackoverflow和android开发工具包中找到的一些代码片段。我想将指纹画布放在可锁定的横向视图中。但是,每当我尝试在水平方向上绘制时,scrollview都会滚动而不是在画布上绘画。当我在fingerpaint的自定义视图的位置有一个imageview时,它没有这个问题。我想也许在自定义lockableHorizo​​ntalScrollView和自定义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;
}

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);
    }
}

2 个答案:

答案 0 :(得分:1)

这是xml文件的排列问题以及重写错误的方法。该按钮需要放在horizo​​ntalScrollView之外。而不是覆盖onTouchEvent方法的lockableHorizo​​ntalScrollView,它应该覆盖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)

我不明白你希望滚动行为如何工作:具体来说,系统如何表示滚动手势和绘画手势之间的区别。

但是,您可以通过阅读上一个问题找到如何以编程方式启用和禁用滚动:

Disable ScrollView action