• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android--实现ViewPager边界回弹效果(转),android--viewpager

Android--实现ViewPager边界回弹效果(转),android--viewpager

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android viewpager,android中viewpager,android 仿viewpager,android实现viewpager,android tv viewpager等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android--实现ViewPager边界回弹效果(转),android--viewpager


该View转自   http://blog.csdn.net/Kalwang/article/details/4708721  ,感谢这位大神。

  1 public class BounceBackViewPager extends ViewPager {
  2 
  3     private int currentPosition = 0;
  4     private Rect mRect = new Rect();//用来记录初始位置
  5     private boolean handleDefault = true;
  6     private float preX = 0f;
  7     private static final float RATIO = 0.5f;//摩擦系数
  8     private static final float SCROLL_WIDTH = 10f;
  9 
 10     public BounceBackViewPager(Context context) {
 11         super(context);
 12     }
 13 
 14     public BounceBackViewPager(Context context, AttributeSet attrs) {
 15         super(context, attrs);
 16     }
 17 
 18     @Override
 19     public boolean dispatchKeyEvent(KeyEvent event) {
 20         return super.dispatchKeyEvent(event);
 21     }
 22 
 23     @Override
 24     public boolean onInterceptTouchEvent(MotionEvent ev) {
 25         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
 26             preX = ev.getX();//记录起点
 27             currentPosition = getCurrentItem();
 28         }
 29         return super.onInterceptTouchEvent(ev);
 30     }
 31 
 32     @Override
 33     public boolean onTouchEvent(MotionEvent ev) {
 34         switch (ev.getAction()) {
 35             case MotionEvent.ACTION_UP:
 36                 onTouchActionUp();
 37                 break;
 38             case MotionEvent.ACTION_MOVE:
 39                 if (getAdapter().getCount() == 1) {
 40                     float nowX = ev.getX();
 41                     float offset = nowX - preX;
 42                     preX = nowX;
 43 
 44                     if (offset > SCROLL_WIDTH) {//手指滑动的距离大于设定值
 45                         whetherConditionIsRight(offset);
 46                     } else if (offset < -SCROLL_WIDTH) {
 47                         whetherConditionIsRight(offset);
 48                     } else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况
 49                         if (getLeft() + (int) (offset * RATIO) != mRect.left) {
 50                             layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
 51                         }
 52                     }
 53                 } else if ((currentPosition == 0 || currentPosition == getAdapter().getCount() - 1)) {
 54                     float nowX = ev.getX();
 55                     float offset = nowX - preX;
 56                     preX = nowX;
 57 
 58                     if (currentPosition == 0) {
 59                         if (offset > SCROLL_WIDTH) {//手指滑动的距离大于设定值
 60                             whetherConditionIsRight(offset);
 61                         } else if (!handleDefault) {//这种情况是已经出现缓冲区域了,手指慢慢恢复的情况
 62                             if (getLeft() + (int) (offset * RATIO) >= mRect.left) {
 63                                 layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
 64                             }
 65                         }
 66                     } else {
 67                         if (offset < -SCROLL_WIDTH) {
 68                             whetherConditionIsRight(offset);
 69                         } else if (!handleDefault) {
 70                             if (getRight() + (int) (offset * RATIO) <= mRect.right) {
 71                                 layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
 72                             }
 73                         }
 74                     }
 75                 } else {
 76                     handleDefault = true;
 77                 }
 78 
 79                 if (!handleDefault) {
 80                     return true;
 81                 }
 82                 break;
 83 
 84             default:
 85                 break;
 86         }
 87         return super.onTouchEvent(ev);
 88     }
 89 
 90     private void whetherConditionIsRight(float offset) {
 91         if (mRect.isEmpty()) {
 92             mRect.set(getLeft(), getTop(), getRight(), getBottom());
 93         }
 94         handleDefault = false;
 95         layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBot



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片,
  • Android--实现ViewPager边界回弹效果(转),android--viewpager
  • [Android] 使用ViewPager 实现导航,androidviewpager
  • Android之ViewPager 第一课,androidviewpager
  • Android之ViewPager 第二课,androidviewpager
  • Android ViewPager使用详解

相关文章

  • 2017-05-26深入了解Kotlin的必备书籍,深入了解kotlin必备
  • 2017-05-26用户登录(Material Design + Data-Binding + MVP架构模式)实现,data-bindingmvp
  • 2017-05-26showSetPwdDialog--自定义对话框,showsetpwddialog--
  • 2017-05-26安开发卓之Notification(一)代码直接能用,安开发notification
  • 2017-05-26Android 四大组件之Activity(续2),androidactivity
  • 2017-05-26java 接口的作用和好处,java接口好处
  • 2017-05-26一个难倒 3年 android开发经验 &quot; 工程师 &quot; 的 &quot;bug&quot;
  • 2017-05-26Android学习笔记-EditText(输入框)(一),android-edittext
  • 2017-05-26根据布局自动生成代码实例化的网站,布局自动生成
  • 2017-05-26Android-BroadcastReceiver详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓高级组件-----自动编辑文本框,安卓-----文本框
    • Android Doze模式源码分析,androiddoze
    • Android常用英文词汇,不为命名纠结,android英文
    • 初涉RxAndroid结合Glide实现多图片加载操作
    • Intent之运输大队长,Intent之运输队长
    • android获取屏幕宽高与获取控件宽高,android获取控件
    • android中的回调请求的个人理解,android回调
    • 组件RecyclerView的应用(一),组件recyclerview
    • android studio我的习惯操作,androidstudio习惯
    • 安卓第十八天笔记--简单动画,安卓第十八天--

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有