android - 使用 ViewPager 实现类似 iOS 应用关闭垂直滑动关闭的功能

标签 android android-fragments android-viewpager fragmentpageradapter swipe-gesture

我目前的 View 在 ViewPager 中水平排列,并且可以使用 PagerAdapter 循环浏览它们。目前,要执行我想在滑动时执行的操作,我必须在 View 页面上双击。我可以发布代码,但是提取必要的部分有点困难...

我想要的是能够在这些 View 上垂直滑动,让它们通过滑动和淡出垂直平移,然后在它们到达距设备边缘一定距离时执行操作。

要了解我的想法,在图库应用中,您可以捏合打开的照片以缩小并打开水平幻灯片 View 。从那里您可以向上(或向下)滑动照片/视频以将其删除。对于那些没有相同 Gallery 应用程序的人来说,这就像在 iOS 上关闭应用程序一样。

我尝试扫描 Gallery 应用程序的源代码,但没能找到正确的 Activity。

最佳答案

view.setOnTouchListener(new View.OnTouchListener(){
    public boolean onTouch(View v, MotionEvent motion) {
       float y = motion.getY();
       /* NOTE: the following line might need to be in runOnUiThread() */
       view.animate().alpha(1-Math.abs(y-height/2)/(height/2)).setDuration(50).start();
       return true; //false if you want to pass this event on to other listeners
    }
});

使用 1-Math.abs(y-height/2)/(height/2) 的解释是,当我在中心时,我希望 alpha 为 1,而 alpha 为在顶部或底部时为 0。您必须自己确定如何获取 height 值,或者是否要使用不同的方法来计算 alpha。如果您想获取触摸相对于屏幕的位置而不是相对于 View 的位置,请使用 getRawY()

此外,了解 MotionEvent 是按下、拖动还是释放事件可能对您很有用,请使用 motion.getAction() == 分别带有 MotionEvent.ACTION_UP、MotionEvent.ACTION_MOVE 和 MotionEvent.ACTION_DOWN。

关于android - 使用 ViewPager 实现类似 iOS 应用关闭垂直滑动关闭的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159127/

相关文章:

java - 无法在三星设备上的 Android Studio 3.4.1 中运行项目

android - 将多个sqlite数据库同步到一个mysql数据库

java - android - 如何访问抽屉导航标题项?

android - 从bottomNavigationView导航到 fragment B时保存 fragment A的状态

java - AVD 的 Arm 图像无法正常工作(Android Studio)。 CPU 上没有 VT-X

android - OkHTTP 和 Picasso 不能一起运行

android - 添加 navGraph 属性时,膨胀类 Fragment 时出错

android - 在 ViewPager 中实现弹性/弹跳动画效果的最佳方法是什么?

android - 查看寻呼机 - 基于条件检查,而不是添加少量项目

即使显示其他 fragment ,Android ViewPager onClickListener 也会使用react