Ich arbeite an Gesture Aktivität in Android verwendet I-Klasse die Swipe-Aktion zu erkennen istAndroid, wie Swipe-Geste auf Linearlayout ohne onDown hinzufügen wahr
public class ActivitySwipeDetector implements View.OnTouchListener {
static final String logTag = "ActivitySwipeDetector";
private Activity activity;
static final int MIN_DISTANCE = 100;
private float downX, downY, upX, upY;
public ActivitySwipeDetector(Activity activity){
this.activity = activity;
}
public void onRightToLeftSwipe(){
Log.i(logTag, "RightToLeftSwipe!");
Toast.makeText(activity, "RightToLeftSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public void onLeftToRightSwipe(){
Log.i(logTag, "LeftToRightSwipe!");
Toast.makeText(activity, "LeftToRightSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public void onTopToBottomSwipe(){
Log.i(logTag, "onTopToBottomSwipe!");
//Toast.makeText(activity, "onTopToBottomSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public void onBottomToTopSwipe(){
Log.i(logTag, "onBottomToTopSwipe!");
//Toast.makeText(activity, "onBottomToTopSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
downY = event.getY();
return true;
}
case MotionEvent.ACTION_UP: {
upX = event.getX();
upY = event.getY();
float deltaX = downX - upX;
float deltaY = downY - upY;
// swipe horizontal?
if(Math.abs(deltaX) > MIN_DISTANCE){
// left or right
if(deltaX < 0) { this.onLeftToRightSwipe(); return true; }
if(deltaX > 0) { this.onRightToLeftSwipe(); return true; }
}
else {
Log.i(logTag, "Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE);
return false; // We don't consume the event
}
// swipe vertical?
if(Math.abs(deltaY) > MIN_DISTANCE){
// top or down
if(deltaY < 0) { this.onTopToBottomSwipe(); return true; }
if(deltaY > 0) { this.onBottomToTopSwipe(); return true; }
}
else {
Log.i(logTag, "Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE);
return false; // We don't consume the event
}
return true;
}
}
return false;
}
}
meine XML-Datei ist
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/action_settings"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</LinearLayout>
und in meiner Tätigkeit Aufruf ich mag dieses
ActivitySwipeDetector activitySwipeDetector = new ActivitySwipeDetector(this);
LinearLayout lowestLayout = (LinearLayout)this.findViewById(R.id.action_settings);
lowestLayout.setOnTouchListener(activitySwipeDetector);
ich ActivitySwipeDetector(this);
so seine Arbeit gut mit voll ein gerufener Kreativität. Aber wie kann ich Swipe-Detektor nur auf LinearLayout nicht auf die gesamte Aktivität anwenden. Bitte hilf mir.
Sie fügen den Touch-Listener für eine bestimmte Ansicht an. Entscheiden Sie, welche Ansicht Swipe erkennt, und hängen Sie sie an die entsprechende Ansicht an. Wenn Sie es in der Aktivität auf der obersten Ebene anhängen, wie Sie es hier getan haben, wird es für die gesamte Aktivität funktionieren. –
Aber wenn ich die Kinderansicht anschließe, funktioniert das nicht ... –