Swipe listeners in Android

前端 未结 4 1304
無奈伤痛
無奈伤痛 2021-02-08 09:49

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 ins

相关标签:
4条回答
  • 2021-02-08 10:15

    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"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <ViewFlipper
            android:id="@+id/view_flipper"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center_vertical" >
    
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Soy A"
                android:textColor="#FFFFFF" />
    
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Soy B"
                android:textColor="#BBBFFF" />
    
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Soy C"
                android:textColor="#FFBBFF" />
    
            <TextView
                android: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;
    
    public class SwipeActivity extends Activity {
    
        private Animation mInFromRight;
        private Animation mOutToLeft;
        private Animation mInFromLeft;
        private Animation mOutToRight;
        private ViewFlipper mViewFlipper;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            mViewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);
            mViewFlipper.setDisplayedChild(0);
            initAnimations();
        }
    
        private void initAnimations() {
            mInFromRight = new TranslateAnimation(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);
            AccelerateInterpolator accelerateInterpolator = new AccelerateInterpolator();
            mInFromRight.setInterpolator(accelerateInterpolator);
    
            mInFromLeft = new TranslateAnimation(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 = new TranslateAnimation(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 = new TranslateAnimation(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 = new GestureDetector(new MyGestureDetector());
    
            mViewFlipper.setOnTouchListener(new OnTouchListener() {
    
                public boolean onTouch(View v, MotionEvent event) {
                    if (gestureDetector.onTouchEvent(event)) {
                        return false;
                    } else {
                        return true;
                    }
                }
            });
        }
    
        private class MyGestureDetector extends SimpleOnGestureListener {
    
            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) {
                System.out.println(" in onFling() :: ");
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
                        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    mViewFlipper.setInAnimation(mInFromRight);
                    mViewFlipper.setOutAnimation(mOutToLeft);
                    mViewFlipper.showNext();
                } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
                        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    mViewFlipper.setInAnimation(mInFromLeft);
                    mViewFlipper.setOutAnimation(mOutToRight);
                    mViewFlipper.showPrevious();
                }
                return super.onFling(e1, e2, velocityX, velocityY);
            }
        }
    }
    
    0 讨论(0)
  • 2021-02-08 10:25

    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

    0 讨论(0)
  • 2021-02-08 10:28

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

    0 讨论(0)
  • 2021-02-08 10:37
    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;
                    }
                    return true;
                }
            };
    
    0 讨论(0)
提交回复
热议问题