раскраска пальца в горизонтальном обзоре - PullRequest
0 голосов
/ 22 мая 2011

Я комбинирую некоторые фрагменты кода, которые я нашел в stackoverflow и в комплекте для разработки под Android. Я хочу поместить холст с отпечатком пальца в закрываемый горизонтальный вид прокрутки. Однако всякий раз, когда я пытаюсь нарисовать в горизонтальном направлении, прокрутка прокрутки, а не рисование на холсте. У меня не было этой проблемы, когда у меня было изображение в месте пользовательского вида с отпечатка пальца. Я думаю, что, возможно, ошибка переопределения onTouchEvent как в пользовательском lockableHor HorizontalScrollView, так и в пользовательском DrawingView. Я могу предоставить дополнительную информацию и код, если требуется.

Выдержки из:

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

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Это проблема размещения файла xml, а также переопределение неправильного метода. Кнопка должна быть размещена за пределами горизонтальной прокрутки. Вместо lockableHor horizontalScrollView, переопределяющего метод 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;
}
0 голосов
/ 22 мая 2011

Я не понимаю, как вы хотите, чтобы поведение прокрутки работало: в частности, как система предназначена для определения разницы между жестом прокрутки и жестом рисования.

Однако вы можете узнать, какчтобы программно включить и отключить прокрутку, прочитав этот предыдущий вопрос:

Отключить действие ScrollView

...