Android 实现ViewPager边界回弹效果实例代码
短信预约 -IT技能 免费直播动态提醒
废话不多说了,直接给大家贴代码了,具体代码如下所示:
public class BounceBackViewPager extends ViewPager { private int currentPosition = 0; private Rect mRect = new Rect();//用来记录初始位置 private boolean handleDefault = true; private float preX = 0f; private static final float RATIO = 0.5f;//摩擦系数 private static final float SCROLL_WIDTH = 10f; public BounceBackViewPager(Context context) { super(context); } public BounceBackViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchKeyEvent(KeyEvent event) { return super.dispatchKeyEvent(event); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { preX = ev.getX();//记录起点 currentPosition = getCurrentItem(); } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_UP: onTouchActionUp(); break; case MotionEvent.ACTION_MOVE: if (getAdapter().getCount() == 1) { float nowX = ev.getX(); float offset = nowX - preX; preX = nowX; if (offset > SCROLL_WIDTH) {//手指滑动的距离大于设定值 whetherConditionIsRight(offset); } else if (offset < -SCROLL_WIDTH) { whetherConditionIsRight(offset); } else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况 if (getLeft() + (int) (offset * RATIO) != mRect.left) { layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom()); } } } else if ((currentPosition == 0 || currentPosition == getAdapter().getCount() - 1)) { float nowX = ev.getX(); float offset = nowX - preX; preX = nowX; if (currentPosition == 0) { if (offset > SCROLL_WIDTH) {//手指滑动的距离大于设定值 whetherConditionIsRight(offset); } else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况 if (getLeft() + (int) (offset * RATIO) >= mRect.left) { layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom()); } } } else { if (offset < -SCROLL_WIDTH) { whetherConditionIsRight(offset); } else if (!handleDefault) { if (getRight() + (int) (offset * RATIO) <= mRect.right) { layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom()); } } } } else { handleDefault = true; } if (!handleDefault) { return true; } break; default: break; } return super.onTouchEvent(ev); } private void whetherConditionIsRight(float offset) { if (mRect.isEmpty()) { mRect.set(getLeft(), getTop(), getRight(), getBottom()); } handleDefault = false; layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom()); } private void onTouchActionUp() { if (!mRect.isEmpty()) { recoveryPosition(); } } private void recoveryPosition() { TranslateAnimation ta = new TranslateAnimation(getLeft(), mRect.left, 0, 0); ta.setDuration(300); startAnimation(ta); layout(mRect.left, mRect.top, mRect.right, mRect.bottom); mRect.setEmpty(); handleDefault = true; }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Android 实现ViewPager边界回弹效果实例代码
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
Android 实现ViewPager边界回弹效果实例代码
废话不多说了,直接给大家贴代码了,具体代码如下所示:public class BounceBackViewPager extends ViewPager { private int currentPosition = 0; private
2023-05-31
Android编程ViewPager回弹效果实例分析
本文实例讲述了Android编程ViewPager回弹效果。分享给大家供大家参考,具体如下:
其实在我们很多应用中都看到当ViewPager滑到第一页或者最后一页的时候,如果再滑动的时候,就会有一个缓冲的过程,也就是回弹效果。之前在研究回弹
2022-06-06
2024-04-02
Android界面上拉下拉的回弹效果实例代码
废话不多说,具体代码如下所示:public class MyScrollView extends ScrollView {private View childView;public MyScrollView(Context context)
2022-06-06
Android自定义ScrollView实现放大回弹效果实例代码
1,刚刚在别人开源的项目中看到了一个挺不错的用户体验,效果图如下:2,那下面我们就来实现一下,首先看一下布局,由于一般只是我们包含头像的那部分方法,所以这里我们要把布局分成两部分,对应的布局文件效果图如下:3,自定义ScrollView
第
2022-06-06
2024-04-02
android实现ViewPager的Indicator的实例代码
虽然在android5.0中design中有了TabLayout来实现ViewPager的Indicator,简单好用。但这个是我自己实现的,学习了很多,记录在这里。效果图: 第一步
新建一个类继承LinearLayout,用来绘制指示器,
2022-06-06
如何在Android界面中实现一个回弹效果
这篇文章给大家介绍如何在Android界面中实现一个回弹效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体代码如下所示:public class MyScrollView extends ScrollView {
2023-05-31
2024-04-02
Android DrawerLayout实现抽屉效果实例代码
官网:https://developer.android.com/training/implementing-navigation/nav-drawer.html
贴上主要的逻辑和布局文件:
activity_main.xml
2022-06-06
Unity3D 描边效果代码(轮廓边框) 实例
Unity3D 描边效果教程,使用Shader模块就可以轻松实现,编程学习网提供Unity3D游戏开发实例代码,有条件的同学可以复制实现效果
2024-04-23
2024-04-02
2024-04-02
2024-04-02
Android 实现控件悬浮效果实例代码
随着移动互联网的快速发展,它已经和我们的生活息息相关了,在公交地铁里面都能看到很多人的人低头看着自己的手机屏幕,从此“低头族”一词就产生了,作为一名移动行业的开发人员,我自己也是一名“低头族”,上下班时间在公交地铁上看看新闻来打发下时间,有
2022-06-06
2024-04-02
Android控件Gallery3D效果实例代码
贴上代码: 1.扩展Gallery: 代码如下: public class GalleryFlow extends Gallery { private Camera mCamera = new Camera();//相机类 private
2022-06-06
Android怎么自定义scrollview实现回弹效果
本篇内容主要讲解“Android怎么自定义scrollview实现回弹效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么自定义scrollview实现回弹效果”吧!1. 新建M
2023-06-29
编程热搜
Python 学习之路 - Python
一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-chatgpt的中文全称是什么
chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列C/C++可变参数的使用
可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃Python 3 教程
Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 PythonPython pip包管理
一、前言 在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install 和 pip , 目前官方推荐使用 pip。
编程资源站
- 资料下载
- 历年试题
目录
反馈
我要
反馈