Android实现SwipeBack(右滑退出)效果
2016-02-24 00:01
423 查看
效果演示
初始状态
滑动中状态
结束状态
这是目前实现在SegmentFault for Android v2.6中的效果。
一切一切的之前,感谢 ikew0ng/SwipeBackLayout
我使用这个库,并经过一些修改,支持了Android 4.0以上所有的版本。
我们来分析下
SwipeBackLayout的源码
一些修改
我之前做过实验,碰到的最大问题是上层的Activity底下并不是透明的,因此看不见下层Activity的视图。在
SwipeBackLayout中采用的方案是使用一个叫
convertToTranslucent的未公开的api,再配合
theme中
把
windowIsTranslucent设置为
true,即可实现上层的
Window背景为透明。
这里要注意的地方是调用
convertToTranslucent可以使用反射的方法进行调用,但是在
Lollipop中,它的参数变成了两个,而在5.0以下是一个参数,所以需要在源码中对
Util.convertActivityToTranslucent这个方法进行一些修改。
public static void convertActivityToTranslucent(Activity activity) { try { Class[] t = Activity.class.getDeclaredClasses(); Class translucentConversionListenerClazz = null; Class[] method = t; int len$ = t.length; for(int i$ = 0; i$ < len$; ++i$) { Class clazz = method[i$]; if(clazz.getSimpleName().contains("TranslucentConversionListener")) { translucentConversionListenerClazz = clazz; break; } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Method var8 = Activity.class.getDeclaredMethod("convertToTranslucent", translucentConversionListenerClazz, ActivityOptions.class); var8.setAccessible(true); var8.invoke(activity, new Object[]{null, null}); } else { Method var8 = Activity.class.getDeclaredMethod("convertToTranslucent", translucentConversionListenerClazz); var8.setAccessible(true); var8.invoke(activity, new Object[]{null}); } } catch (Throwable e) { } }
使得能适配4.0 - 5.0+所有的设备
转自:https://segmentfault.com/a/1190000002977515
相关文章推荐
- 【分享】Android中几种图像特效处理的小技巧
- AsyncTask分析
- Android 立方体翻转效果
- Android进阶之抢购倒计时功能
- <<Android 开发艺术探索>> 第一章 Actiivty的生命周期和启动模式
- Android版本和API Level
- 在android中读取word、excel、pdf
- Android自定义控件
- Android中的动态加载机制
- Android中插件开发篇之----类加载器
- 关于android基础教程一书的初步解读后发现的一些问题
- android:TableLayout表格布局详解
- [android] 点击事件的四种写法
- android listview图片错位原理及解决方法
- 其他零散学习-Android四大组件
- Android 6 Marshmallow USB调试授权
- 解决Android Studio的ADB not responding错误
- android中的类加载器,以及加载机制
- Android学习心得第二课
- 转行自学android,Day3-蒙圈