借助scroller实现侧滑功能
来源:互联网 发布:小猪cms收费 编辑:程序博客网 时间:2024/05/18 01:15
基本的滑动操作是通过ScrollTo() 和 ScrollBy()实现。
关于这两个方法的理解:
很多人对这两个方法的理解一般从在误区,起初我对这两个方法的理解也有问题。我当时以为这个两个方法其实移动的就是我们要移动的View ,其实这是有问题的,这两个方法移动的是承载我们要移动的view的容器。所以正负值和我们一般理解的正负值是正好相反的。
可以这样理解,相当于我们要移动的view是固定不动的,我们来挪动它的容器以实现移动view的目的。列如我们想让我们的view向右移动的话,view是固定的,那我们的容器必须向左移动,而向左移动的话以屏幕坐标来说是负值,所以我们传负数。
而这两个方法是点到点的移动,所以我们通过Scroller实现平滑的移动。
例如侧滑关闭页面,当我们拖拽的距离大于屏幕一般的宽度时我们关闭页面,否则将页面滚动到初始位置,而这个滚动的操作就借助Scroller实现:
private class ScrollPager extends FrameLayout { private final Scroller scroller; public ScrollPager(@NonNull Context context) { super(context); scroller = new Scroller(context); } private float startX; private float lastX; int disX = 0;//移动距离 @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); startX = event.getRawX(); switch (action) { case MotionEvent.ACTION_DOWN: lastX = startX; disX = 0; scroller.abortAnimation(); break; case MotionEvent.ACTION_MOVE: disX = (int) (lastX - startX); scrollBy(disX, 0); lastX = startX; break; case MotionEvent.ACTION_UP: if (Math.abs(getScrollX()) > width / 2) { scroller.startScroll(getScrollX(), 0, -(width-Math.abs(getScrollX())), 0,1000); } else { scroller.startScroll(getScrollX(),0, Math.abs(getScrollX()),0,1000); } invalidate(); break; } return true; } @Override public void computeScroll() { if (scroller.computeScrollOffset()) { scrollTo(scroller.getCurrX(), scroller.getCurrY()); postInvalidate(); } } }
阅读全文
0 0
- 借助scroller实现侧滑功能
- Android Scroller详解,实现仿QQ列表item侧滑删除功能
- scroller滑屏实现
- 借助DrawerLayout实现侧滑菜单
- 自定义布局实现左右或者上下翻页效果(借助Scroller类)
- 使用Scroller实现横滑
- 利用Scroller实现防QQ列表侧滑效果
- Scroller类功能介绍
- 自定义View实现滑屏[Scroller]
- Scroller的应用--滑屏实现
- Scroller的应用--滑屏实现
- Scroller的应用--滑屏实现
- Scroller的应用--滑屏实现
- .net 实现发送短信功能。(借助软信通彩信客户端)
- sencha-touch下借助phoneGap实现拍照,二维码的功能
- sencha-touch下借助phoneGap实现拍照,二维码的功能
- Jquery Jqprint—借助Jquery Jqprint实现网页打印功能
- RecyclerView借助ItemTouchHelper实现拖动和滑动删除功能
- 源代码管理工具Git和SVN
- ViewPager 无限轮滑
- 全选与反选 +二级联动
- 用户态和内核态切换
- STM32时钟配置、GPIO配置
- 借助scroller实现侧滑功能
- 异常解决篇:spring cloud stream rabbitMq配置错误,导致无法启动
- 十亿级分发集群
- JDBC 演示
- UVa 10474Where is the Marble STL 模板练习
- BZOJ1497: [NOI2006]最大获利
- SpringMVC学习笔记
- 密码加salt
- Tablayput