2017-02-28 4 views
0

Ich habe benutzerdefinierte scrollview geschrieben, die ohne Stift aus Tablets funktioniert. Wenn Sie den Tablet-Stift verwenden, ermöglicht dieser customScrollview dem Stift das Scrollen auch dann, wenn das Scrollen deaktiviert ist.Wie verbieten Scrollview Scrolling durch den Stift?

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

Antwort

0

Zwingende onInterceptHoverListener hat den Trick. Jetzt wird der Stylus-On-Over-Scroll behandelt, wenn die Scroll-Ansicht aktiviert ist, das Gleiche wird nicht behandelt, sobald die Scroll-Ansicht aktiviert wurde = 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; 
     } 
    } 
0

können Sie dies versuchen.

if (MotionEvent.getToolType(TOOL_TYPE_STYLUS)) 
{ 
// disable scrollview 
} 
+0

Nein, keine gute Lösung @Rick. Mein Problem ist nicht die Scrollview. Ich hoffe, du hast einen Stift in einem Tablet benutzt. Wenn Sie also mit dem Stift auf das Ende des Startbildschirms zeigen, gelangen Sie zum nächsten Bildschirm. Dasselbe passiert auch in Scrollview. Wenn etwas auf dem Bildschirm gescrollt werden kann, wird das Scrollen mit dem Stift am Ende bewirkt. Ich möchte damit aufhören. Weil die Scrollview 100% sicher deaktiviert ist. Aber wenn ich den Stift bis zum Ende zeige, fängt er an zu scrollen. – HourGlass

0

Versuchen Sie folgendes:

@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; 
    } 
} 
+0

Nein, nicht der richtige Weg, es zu tun. Können Sie bitte auf Rick Antwort kommentieren Abschnitt @ Dragoslav – HourGlass

+0

Oh, tut mir leid, dann meine schlechte. –

Verwandte Themen