Ich habe eine benutzerdefinierte Ansicht, die ich Touch-Ereignisse für behandeln möchte. Insbesondere sollte das Ziehen eines Fingers über die Ansicht dazu führen, dass der Inhalt gescrollt wird. Um dies zu tun, habe ich den folgenden onTouchListener implementiert:
private OnTouchListener graphOnTouchListener = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
System.out.println("onTouch called");
System.out.println("view width: " + v.getWidth());
System.out.println("view height: " + v.getHeight());
System.out.println("view: " + v);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
// First finger down
System.out.println("ACTION_DOWN x: " + event.getX() + ", y: " + event.getY());
startTouch(event.getX());
break;
case MotionEvent.ACTION_UP:
// Last finger to be removed
System.out.println("ACTION_UP x: " + event.getX() + ", y: " + event.getY());
break;
case MotionEvent.ACTION_MOVE:
// A finger moves
System.out.println("ACTION_MOVE x: " + event.getX() + ", y: " + event.getY());
moveTouch(event.getX());
break;
default:
break;
}
// The event has been handled, so return true
return true;
}
};
Dies funktioniert wie erwartet, es sei denn, der Benutzer bewegt seinen Finger nach oben oder unten, während er sich in der Ansicht befindet. An diesem Punkt werden keine Berührungsereignisse mehr gesendet (was durch eine fehlende Ausgabe in LogCat belegt wird). Allerdings ist die Verwendung von adb shell getevent
zeigt immer noch Ereignisse, die durch Berührungsbewegungen ausgelöst werden.
Kann mir jemand vorschlagen, wie ich dieses Problem beheben kann?
Wie gewünscht, sieht das Layout-XML wie folgt aus:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff">
<FrameLayout android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView android:layout_width="fill_parent"
android:layout_height="fill_parent" android:padding="10dip">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<com.graphlib.ShaderAreaGraphView
android:layout_width="fill_parent" android:layout_height="200dip"
android:id="@+id/activity_power_realtime" android:background="#000000" />
<LinearLayout android:layout_width="fill_parent" android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:gravity="center">
<Button android:text="<<" android:id="@+id/goBackwardsButton" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Zoom out" android:id="@+id/zoomOutButton" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Zoom in" android:id="@+id/zoomInButton" android:layout_width="wrap_content" android:layout_height="wrap_content" ></Button>
<Button android:text=">>" android:id="@+id/goForwardsButton" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
</LinearLayout>
</ScrollView>
</FrameLayout>
</LinearLayout>