我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android 实现ViewPager边界回弹效果实例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 实现ViewPager边界回弹效果实例代码

废话不多说了,直接给大家贴代码了,具体代码如下所示:

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

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

android实现ViewPager的Indicator的实例代码

虽然在android5.0中design中有了TabLayout来实现ViewPager的Indicator,简单好用。但这个是我自己实现的,学习了很多,记录在这里。效果图: 第一步 新建一个类继承LinearLayout,用来绘制指示器,
2022-06-06

如何在Android界面中实现一个回弹效果

这篇文章给大家介绍如何在Android界面中实现一个回弹效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体代码如下所示:public class MyScrollView extends ScrollView {
2023-05-31

Android 实现抖音头像底部弹框效果的实例代码

布局文件 activity_test.xml
2022-06-06

Android DrawerLayout实现抽屉效果实例代码

官网:https://developer.android.com/training/implementing-navigation/nav-drawer.html 贴上主要的逻辑和布局文件: activity_main.xml
2022-06-06

Unity3D 描边效果代码(轮廓边框) 实例

Unity3D 描边效果教程,使用Shader模块就可以轻松实现,编程学习网提供Unity3D游戏开发实例代码,有条件的同学可以复制实现效果
Unity3D 描边效果代码(轮廓边框) 实例
2024-04-23

Android实现代码画虚线边框背景效果

实现如下边框效果:虚线画效果,可以使用Android中的xml来做。下面话不多说,直接上代码:
2022-06-06

Android 实现控件悬浮效果实例代码

随着移动互联网的快速发展,它已经和我们的生活息息相关了,在公交地铁里面都能看到很多人的人低头看着自己的手机屏幕,从此“低头族”一词就产生了,作为一名移动行业的开发人员,我自己也是一名“低头族”,上下班时间在公交地铁上看看新闻来打发下时间,有
2022-06-06

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配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录