实现Activity的滑动返回效果
实现 效果 返回 滑动 Activity
2023-09-11 14:14:59 时间
介绍
在知乎client上看到了这样的效果。左滑Activity能够返回到上一界面。非常适合单手操作。
找了非常久,最终在github上看到了SwipeBackLayout这个开源项目。地址:
实现
须要使用到的类:
SwipeBackActivity.java
SwipeBackLayout.java
ViewDragHelper.java
- 使当前的Activity继承SwipeBackActivity
public class BaseActivity extends SwipeBackActivity {
private SwipeBackLayout mSwipeBackLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSwipeBackLayout = getSwipeBackLayout();
//设置滑动方向,可设置EDGE_LEFT, EDGE_RIGHT, EDGE_ALL, EDGE_BOTTOM
mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
}
}
- 在使用的主题中加入以下的属性,否则滑动时activity的下层是黑色的
<item name="android:windowIsTranslucent">true</item>
- 当使用BaseActivity时,为了使首页不会滑动删除,仅仅需例如以下设置就可以
setSwipeBackEnable(false); //禁止滑动删除
- 另外。这个滑动删除的效果仅仅能从边界滑动才有效果。假设要扩大touch的范围,能够调用
mSwipeBackLayout.setEdgeSize(int size);
可是上面这种方法不太好用。效果不明显,推荐改动ViewDragHelper.java这个类源代码中的getEdgeTouched(int x, int y)方法,例如以下
private int getEdgeTouched(int x, int y) {
int result = 0;
result = EDGE_LEFT;//这样每次都是全屏左滑删除
//解决仅仅有点击屏幕左边才有响应的问题
/*if (x < mParentView.getLeft() + mEdgeSize)
result = EDGE_LEFT;
if (y < mParentView.getTop() + mEdgeSize)
result = EDGE_TOP;
if (x > mParentView.getRight() - mEdgeSize)
result = EDGE_RIGHT;
if (y > mParentView.getBottom() - mEdgeSize)
result = EDGE_BOTTOM;*/
return result;
}
经过上面步骤,应该就能如期实现效果了。
以下放上我的Demo截图:
这是Demo源代码
开发工具:AndroidStudio
相关文章
- 【23种设计模式】抽象工厂模式(Abstract Factory Pattern) .Net Core实现
- echarts折线图实现切断效果
- 【Css】通过flex弹性盒实现头像区的多行、多列效果(图文+完整代码实例)
- [WPF] 用 Effect 实现线条光影效果
- Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
- 在家也可以享受购物体验?AR+Scene 帮您实现商品3D展示和虚拟试戴
- 官方总结鸿蒙应用开发常见问题与实现方法典型案例
- Swift2.0下UICollectionViews拖拽效果的实现
- js实现星级评分效果(非常规5个li代码)
- iOS 类似美团外卖 app 两个 tableView 联动效果实现
- 动手实现 LRU 算法,以及 Caffeine 和 Redis 中的缓存淘汰策略
- mybatis-paginator对SqlServer分页实现
- openlayers6实现线水流效果(附源码下载)
- 【Unity3D日常开发】Unity3D中实现场景的淡入淡出效果
- JS魔法堂:通过marquee标签实现信息滚动效果
- Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
- 小学生python游戏编程arcade----动画图片实现爆炸效果
- Unity Shader 之 Render Texture 实现简单的镜子镜面效果
- js 实现弹出层效果
- U3D客户端框架之商业项目中的 FSM 有限状态机 实现代码