0

我已经编写了自定义滚动视图,它在没有平板电脑手写笔的情况下工作正常。使用 Tablet 触控笔时,此 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;
    }
}
4

3 回答 3

0

你可以试试这个。

 if (MotionEvent.getToolType(TOOL_TYPE_STYLUS))
 { 
 // disable scrollview 
 }
于 2017-02-28T10:59:14.817 回答
0

覆盖 onInterceptHoverListener 成功了。现在,如果启用了滚动视图,则会处理 Stylus 悬停滚动,一旦启用滚动视图 = 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;
        }
    }
于 2017-02-28T12:55:46.623 回答
0

尝试这个:

@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;
    }
}
于 2017-02-28T11:24:11.373 回答