在活动之间滑动

Posted

技术标签:

【中文标题】在活动之间滑动【英文标题】:Swipe Between Activities 【发布时间】:2015-11-09 13:38:38 【问题描述】:

我有 2 个活动,我想通过滑动在它们之间切换,我在 google 上做了很多研究,但找不到解决方案,因为我正在处理位图(图像),我编写了大部分代码在 Activity 的 onCreate() 方法中,是否有任何解决方案,或者我如何将 Activity 像它一样转换为片段

【问题讨论】:

为什么不将 Fragments 与 ViewPager 一起使用? 我创建了一个活动来显示 sdcard 图像并从中进行选择,以便我可以在其他活动(编辑活动)中显示我可以编辑它们,我不知道我是否可以转换活动像现在一样进入片段 转换并不难,只要稍微改变一下活动就可以了!祝你好运 【参考方案1】:

您可以使用 GestureDetector 来做到这一点。下面是示例 sn-p。

// You can change values of below constants as per need.
private static final int MIN_DISTANCE = 100;
private static final int MAX_OFF_PATH = 200;
private static final int THRESHOLD_VELOCITY = 100;
private GestureDetector mGestureDetector;

// write below code in onCreate method
mGestureDetector = new GestureDetector(context, new SwipeDetector());

// Set touch listener to parent view of activity layout
// Make sure that setContentView is called before setting touch listener.
findViewById(R.id.parent_view).setOnTouchListener(new View.OnTouchListener() 
            @Override
            public boolean onTouch(View v, MotionEvent event) 
                // Let gesture detector handle the event
                return mGestureDetector.onTouchEvent(event);
            
        );


// Define a class to detect Gesture
private class SwipeDetector extends GestureDetector.SimpleOnGestureListener 
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
            if (e1 != null && e2 != null) 
                float dy = e1.getY() - e2.getY();
                float dx = e1.getX() - e2.getX();

                // Right to Left swipe
                if (dx > MIN_DISTANCE && Math.abs(dy) < MAX_OFF_PATH &&
                        Math.abs(velocityX) > THRESHOLD_VELOCITY) 
            // Add code to change activity  
                    return true;
                

                // Left to right swipe
                else if (-dx > MIN_DISTANCE && Math.abs(dy) < MAX_OFF_PATH &&
                        Math.abs(velocityX) > THRESHOLD_VELOCITY) 
            // Below is sample code to show left to right swipe while launching next activity
           currentActivity.overridePendingTransition(R.anim.right_in, R.anim.right_out);
           startActivity(new Intent(currentActivity,NextActivity.class));
                    return true;
                
            
            return false;
        


//Below are sample animation xml files.

anim/right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
</set>

anim/right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
</set>

【讨论】:

它工作正常,谢谢,但我想要的是看到幻灯片效果和已经打开的活动,经过所有这些尝试,我正在考虑将每个活动转换为片段,谢谢你又来了! 对于幻灯片效果,您可以使用动画和活动的 overridePendingTransition 方法。检查我更新的答案。但是是的,我同意使用片段是正确的方式。 我已经用碎片达到了我想要的结果,再次感谢您的回答!【参考方案2】:

有一些库适合你:

    https://github.com/ikew0ng/SwipeBackLayout https://github.com/liuguangqiang/SwipeBack https://github.com/sockeqwe/SwipeBack

【讨论】:

以上是关于在活动之间滑动的主要内容,如果未能解决你的问题,请参考以下文章

Android:在视图/活动/片段之间滑动切换

带有许多活动的滑动菜单

如何使用 Intent 在滑动视图中显示薮活动?

如何缓存片段视图

Bootstrap / jQuery:在导航栏中滑动“活动”状态

活动识别的滑动​​窗口算法