Ich habe eine Aktivität, die einen Gesture Detector implementiert, um die Benutzereingabe für die Navigation zu anderen Bildschirmen zu erfassen. Das hat gut geklappt - aber - ich habe kürzlich eine Klasse aktualisiert, die von BaseActivity abgeleitet ist, um eine onClick-Funktion hinzuzufügen, und nun scheint dieses Klickereignis zu verhindern, dass der onFling getroffen wird. Das onClick ist an einen TextView-Bereich (in einem LinearLayout) gebunden, den ich auf meinem Bildschirm habe. Die Methode resultsClick ist über die Eigenschaft onClick des XML-Layouts mit TextView verbunden.Android onClick blockiert onFling
Ich habe versucht, die Rückgabewerte in onSingleTapUp und onDown ohne Glück zu ändern. Ich habe auch versucht, log-Anweisungen zu allen folgenden Funktionen hinzuzufügen. Keines von ihnen feuert, wenn ich in den TextView-Bereich schiebe, aber sie tun es in anderen Bereichen des Bildschirms.
Vielleicht verwende ich die falschen Suchbegriffe, aber ich konnte kein Beispiel finden, das dies ansprach - aber ich bin mir sicher, dass dieses Problem bereits gelöst wurde.
public class DerivedActivity extends BaseActivity
{
...
/**
* resultsClick - The user clicked on the Results area
* @param v
*/
public void resultsClick(View v)
{
try
{
Log.i(this.toString(), "resultsClick");
startActivity(new Intent(this, Results_TabHost.class));
}
catch (Exception e)
{
Log.e(this.toString(), "Exception" + e.toString());
}
}// end resultsClick
...
}
ist die Basisklasse, die die GestureListener Code
public class BaseActivity extends ActivityGroup
implements OnGestureListener
{
...
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
public boolean onFling(MotionEvent e1,
MotionEvent e2,
float velocityX,
float velocityY)
{
try
{
Log.i(this.toString(), "onFling");
// jump right out if not a swipe/fling
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
{
return false;
}
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&
Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
Log.i(this.toString(), "fling left");
rightArrowClick(null);
}
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&
Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
Log.i(this.toString(), "fling right");
leftArrowClick(null);
}
}
catch (Exception e)
{
Log.e(this.toString(), "Exception" + e.toString());
}
return true;
}// end onFling
// These next methods we are required to have - even if unused -
// in order for the Gesture Handling to work
@Override
public boolean onTouchEvent(MotionEvent motionEvent)
{
return this.gestureDetector.onTouchEvent(motionEvent);
}
@Override
public void onLongPress(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
// Intentionally not handling - must be overridden by listener class
// Intentionally returning true - per code examples
return true;
}
@Override
public void onShowPress(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
// Intentionally returning true - per code examples
return true;
}
@Override
public boolean onDown(MotionEvent e)
{
// Intentionally not handling - must be overridden by listener class
// Intentionally returning true - per code examples
return true;
}
...
}
@CodeFusionMbile - vielen Dank für Ihren Vorschlag. Ich habe gerade versucht, das onTouchEvent mit dem obigen Code zu aktualisieren, aber das Verhalten war nicht von Bedeutung. Ich habe jedem der Gestenereignisse ein Protokoll hinzugefügt, um sicherzugehen. Wenn ich versuche, über den Bildschirm zu wischen, sehe ich das Protokoll der Ergebnisse, aber ich sehe keinen der anderen, der eingeloggt ist. – bursk