Skip to content Skip to sidebar Skip to footer

Swipe Listeners In Android

Is there something like onLeftSwipeListener and onRightSwipeListener in Android? I want to switch views swiping finger back and forward. I use a FrameLayout and an ImageView inside

Solution 1:

Its called GestureDetector and SimpleOnGestureListener which has onFling(). Its called fling and not swipe in this context :)

Solution 2:

yourView.setOnTouchListner(onThumbTouch );

    OnTouchListener onThumbTouch = new OnTouchListener() {
            float previouspoint = 0 ;
            float startPoint=0;
            @Override
            public boolean onTouch(View v, MotionEvent event) {   
                switch(v.getId()) {
                    case R.id.tvDetailsalaujairiyat: // Give your R.id.sample ...switch(event.getAction()){
                            case MotionEvent.ACTION_DOWN:
                                startPoint=event.getX();
                                System.out.println("Action down,..."+event.getX());
                            break;
                            case MotionEvent.ACTION_MOVE:

                            break;
                            case MotionEvent.ACTION_CANCEL:
                                previouspoint=event.getX();
                                if(previouspoint > startPoint){
                                   //Right side swipe        
                                }else{
                                   // Left side swipe
                                }        
                            break;
                       }
                    break;
                }
                returntrue;
            }
        };

Solution 3:

i have made a small example of swiper in android i would like share the code with you.

Chek this.

//LAYOUT///

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><ViewFlipperandroid:id="@+id/view_flipper"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_gravity="center_vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Soy A"android:textColor="#FFFFFF" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Soy B"android:textColor="#BBBFFF" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Soy C"android:textColor="#FFBBFF" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Soy D"android:textColor="#FFFFAF" /></ViewFlipper></LinearLayout>

///ACTIVITY///

import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ViewFlipper;

publicclassSwipeActivityextendsActivity {

    private Animation mInFromRight;
    private Animation mOutToLeft;
    private Animation mInFromLeft;
    private Animation mOutToRight;
    private ViewFlipper mViewFlipper;

    /** Called when the activity is first created. */@OverridepublicvoidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mViewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);
        mViewFlipper.setDisplayedChild(0);
        initAnimations();
    }

    privatevoidinitAnimations() {
        mInFromRight = newTranslateAnimation(Animation.RELATIVE_TO_PARENT,
                +1.0f, Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        mInFromRight.setDuration(500);
        AccelerateInterpolatoraccelerateInterpolator=newAccelerateInterpolator();
        mInFromRight.setInterpolator(accelerateInterpolator);

        mInFromLeft = newTranslateAnimation(Animation.RELATIVE_TO_PARENT,
                -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        mInFromLeft.setDuration(500);
        mInFromLeft.setInterpolator(accelerateInterpolator);

        mOutToRight = newTranslateAnimation(Animation.RELATIVE_TO_PARENT,
                0.0f, Animation.RELATIVE_TO_PARENT, +1.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        mOutToRight.setDuration(500);
        mOutToRight.setInterpolator(accelerateInterpolator);

        mOutToLeft = newTranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, -1.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        mOutToLeft.setDuration(500);
        mOutToLeft.setInterpolator(accelerateInterpolator);

        final GestureDetector gestureDetector;
        gestureDetector = newGestureDetector(newMyGestureDetector());

        mViewFlipper.setOnTouchListener(newOnTouchListener() {

            publicbooleanonTouch(View v, MotionEvent event) {
                if (gestureDetector.onTouchEvent(event)) {
                    returnfalse;
                } else {
                    returntrue;
                }
            }
        });
    }

    privateclassMyGestureDetectorextendsSimpleOnGestureListener {

        privatestaticfinalintSWIPE_MIN_DISTANCE=120;
        privatestaticfinalintSWIPE_MAX_OFF_PATH=250;
        privatestaticfinalintSWIPE_THRESHOLD_VELOCITY=200;

        publicbooleanonFling(MotionEvent e1, MotionEvent e2, float velocityX,
                float velocityY) {
            System.out.println(" in onFling() :: ");
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                returnfalse;
            if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
                    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                mViewFlipper.setInAnimation(mInFromRight);
                mViewFlipper.setOutAnimation(mOutToLeft);
                mViewFlipper.showNext();
            } elseif (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
                    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                mViewFlipper.setInAnimation(mInFromLeft);
                mViewFlipper.setOutAnimation(mOutToRight);
                mViewFlipper.showPrevious();
            }
            returnsuper.onFling(e1, e2, velocityX, velocityY);
        }
    }
}

Solution 4:

Here's a related quetion about implementing gestures detection:

Fling gesture detection on grid layout

You could also use a ViewFlipper with some animation to switch between the views, it looks good, here's an example implementation for enabling left/right swipe on a viewflipper:

http://www.inter-fuser.com/2009/07/android-transistions-slide-in-and-slide.html

Post a Comment for "Swipe Listeners In Android"