Android: How to swipe between activities (not fragments), master/detail best set-up

后端 未结 4 602
猫巷女王i
猫巷女王i 2021-02-06 17:11

I\'m working on an android app and I\'m fairly new to all this, including mobile app development, so I have a few questions. Any help would be amazing!

1) Is it possible

相关标签:
4条回答
  • 2021-02-06 17:34
    Is it possible to swipe between entire activities (including action bar)? 
    

    No you cant, you can only do it with Fragments not with Activities.

    What is the best way to implement a master/detail type layout?
    

    You can use fragment and just add it to the current layout. Another solution is to create a dialog that will have layout.

    Is there a way to have different action bars for every fragment?
    

    Only activity can have ActionBar but you can still make your own ActionBar by creating it using layout and inflate it to the fragment.

    0 讨论(0)
  • 2021-02-06 17:50

    Yes swiping is possible:

    OnTouchSwipeListener

    import android.content.Context;
    import android.view.GestureDetector;
    import android.view.GestureDetector.SimpleOnGestureListener;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    
    public class OnSwipeTouchListener implements OnTouchListener {
    
    
    
    private final GestureDetector gestureDetector;
    private Context context;
    
    /* (non-Javadoc)
     * @see android.view.View.OnTouchListener#onTouch(android.view.View, android.view.MotionEvent)
     */
    public boolean onTouch(final View view, final MotionEvent motionEvent) {
        return gestureDetector.onTouchEvent(motionEvent);
    }
    
    /**
     * Gets the gesture detector.
     * 
     * @return the gesture detector
     */
    public GestureDetector getGestureDetector(){
        return  gestureDetector;
    }
    
    /**
     * Instantiates a new on swipe touch listener.
     * 
     * @param context
     *            the context
     */
    public OnSwipeTouchListener(Context context) {
        super();
        this.context = context;
        gestureDetector = new GestureDetector(context, new GestureListener());
    }
    
    private final class GestureListener extends SimpleOnGestureListener {
    
        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;
    
        /* (non-Javadoc)
         * @see android.view.GestureDetector.SimpleOnGestureListener#onDown(android.view.MotionEvent)
         */
        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
    
        /* (non-Javadoc)
         * @see android.view.GestureDetector.SimpleOnGestureListener#onFling(android.view.MotionEvent, android.view.MotionEvent, float, float)
         */
    
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            boolean result = false;
            try {
                float diffY = e2.getRawY() - e1.getRawY();
                float diffX = e2.getRawX() - e1.getRawX();
                if ((Math.abs(diffX) - Math.abs(diffY)) > SWIPE_THRESHOLD) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            onSwipeRight();
                        } else {
                            onSwipeLeft();
                        }
                    }
                } else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeBottom();
                        } else {
                            onSwipeTop();
                        }
                    }
                }
            } catch (Exception e) {
    
            }
            return result;
        }
    }
    
    /**
     * On swipe right.
     */
    public void onSwipeRight() {
    }
    
    /**
     * On swipe left.
     */
    public void onSwipeLeft() {
    }
    
    /**
     * On swipe top.
     */
    public void onSwipeTop() {
    }
    
    /**
     * On swipe bottom.
     */
    public void onSwipeBottom() {
    }
    }
    

    Implementation:

    OnSwipeTouchListener onSwipeTouchListener = new OnSwipeTouchListener(Activity.this) {
            @Override
            public void onSwipeLeft() {
                //your actions
            }
        };
    
    0 讨论(0)
  • 2021-02-06 17:51

    Actually you can swipe between activities. Check this library.
    Also take a look at this link

    0 讨论(0)
  • 2021-02-06 17:52

    in addition to @Mirek Rusin answer

    OnSwipeTouchListener.java:

    import android.content.Context;
    import android.view.GestureDetector;
    import android.view.GestureDetector.SimpleOnGestureListener;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    
    public class OnSwipeTouchListener implements OnTouchListener {
    
        private final GestureDetector gestureDetector;
    
        public OnSwipeTouchListener (Context ctx){
            gestureDetector = new GestureDetector(ctx, new GestureListener());
        }
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }
    
        private final class GestureListener extends SimpleOnGestureListener {
    
            private static final int SWIPE_THRESHOLD = 100;
            private static final int SWIPE_VELOCITY_THRESHOLD = 100;
    
            @Override
            public boolean onDown(MotionEvent e) {
                return true;
            }
    
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                boolean result = false;
                try {
                    float diffY = e2.getY() - e1.getY();
                    float diffX = e2.getX() - e1.getX();
                    if (Math.abs(diffX) > Math.abs(diffY)) {
                        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                            if (diffX > 0) {
                                onSwipeRight();
                            } else {
                                onSwipeLeft();
                            }
                            result = true;
                        }
                    }
                    else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            onSwipeBottom();
                        } else {
                            onSwipeTop();
                        }
                        result = true;
                    }
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
                return result;
            }
        }
    
        public void onSwipeRight() {
        }
    
        public void onSwipeLeft() {
        }
    
        public void onSwipeTop() {
        }
    
        public void onSwipeBottom() {
        }
    }
    

    Usage on your activity : define a layout (Linear or relative or anything even a toolbar or an image..)

    yourLayout.setOnTouchListener(new OnSwipeTouchListener(MyActivity.this) {
    public void onSwipeTop() {
        Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeRight() {
        startActivity(new Intent(MyActivity.this,NewActivity.class));
                finish();
    }
    public void onSwipeLeft() {
        Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeBottom() {
        Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show();
    }
    
    });
    
    0 讨论(0)
提交回复
热议问题