Как запретить прокрутку Scrollview через стилус?

У меня есть собственный вид прокрутки, который отлично работает без стилуса от планшетов. При использовании планшетного стилуса это customScrollview позволяет стилусу выполнять прокрутку, даже если прокрутка отключена.

public class CustomScrollView extends ScrollView {

    private boolean enabled = false;

    public CustomScrollView(Context context) {
        super(context);
    }

    public CustomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public boolean getEnabled() {
        return this.enabled;
    }
}

person HourGlass    schedule 28.02.2017    source источник


Ответы (3)


Вы могли бы попробовать.

 if (MotionEvent.getToolType(TOOL_TYPE_STYLUS))
 { 
 // disable scrollview 
 }
person Rick    schedule 28.02.2017
comment
Нет, не хорошее решение @Rick. Моя проблема не в прокрутке. Надеюсь, вы пользовались стилусом в планшете. Поэтому, когда вы наводите стилус на конец главного экрана, он переходит к следующему экрану. То же самое происходит и в режиме прокрутки. Если что-то прокручивается на экране, наведение стилуса на конец заставит его прокручиваться. Я хочу, чтобы этого не произошло. Потому что прокрутка отключена на 100%. Но когда я навожу стилус до конца, он начинает прокручиваться. - person HourGlass; 28.02.2017

Попробуй это:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (ev.getToolType(TOOL_TYPE_STYLUS)) { 
        // also, here you should check if it should be disabled at this point
        return !enabled;
    } else {
        return enabled;
    }
}
person Dragoslav Miljević    schedule 28.02.2017
comment
Нет, не правильный способ сделать это. Не могли бы вы обратиться к разделу комментариев Rick Answer @Dragoslav - person HourGlass; 28.02.2017
comment
Ой, извини тогда, мой плохой. - person Dragoslav Miljević; 01.03.2017

Переопределение onInterceptHoverListener помогло. Теперь прокрутка Stylus onhover обрабатывается, если прокрутка включена, то же самое не обрабатывается, если прокрутка включена = false.

    public class CustomScrollView extends ScrollView {

        private boolean enabled = false;

        public CustomScrollView(Context context) {
            super(context);
        }

        public CustomScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }

      @Override
        public boolean onInterceptHoverEvent(MotionEvent event) {
   if (this.enabled)
        {
            return false;
        }
        else
        {
          return true;
        }

}

       public boolean getEnabled() {
            return this.enabled;
        }
    }
person HourGlass    schedule 28.02.2017