全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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;
 }
}

以上所述是小编给大家介绍的Android 实现ViewPager边界回弹效果实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# viewpager回弹  # android  # viewpager  # Android仿IOS回弹效果 支持任何控件  # Android ScrollView实现横向和竖向拖动回弹效果  # Android ScrollView的顶部下拉和底部上拉回弹效果  # Android自定义ScrollView实现放大回弹效果  # Android自定义ScrollView实现放大回弹效果实例代码  # Android界面上拉下拉的回弹效果实例代码  # android仿QQ个人主页下拉回弹效果  # Android RecyclerView上拉加载更多功能回弹实现代码  # Android ReboundScrollView仿IOS拖拽回弹效果  # Android编程ViewPager回弹效果实例分析  # Android自定义控件仿ios下拉回弹效果  # 给大家  # 这种情况  # 小编  # 在此  # 说了  # 不多  # 所示  # 所述  # 给我留言  # 感谢大家  # 疑问请  # 有任何  # SCROLL_WIDTH  # Context  # RATIO  # preX  # float  # final  # static  # KeyEvent 


相关文章: 微信推文制作网站有哪些,怎么做微信推文,急?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  如何在Golang中指定模块版本_使用go.mod控制版本号  北京网站制作公司哪家好一点,北京租房网站有哪些?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  网站制作壁纸教程视频,电脑壁纸网站?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何在IIS中新建站点并配置端口与IP地址?  如何在阿里云通过域名搭建网站?  ui设计制作网站有哪些,手机UI设计网址吗?  建站上传速度慢?如何优化加速网站加载效率?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  智能起名网站制作软件有哪些,制作logo的软件?  如何通过虚拟主机空间快速建站?  如何快速搭建安全的FTP站点?  创业网站制作流程,创业网站可靠吗?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  如何批量查询域名的建站时间记录?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何在橙子建站中快速调整背景颜色?  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站之星后台密码遗忘如何找回?  Android自定义控件实现温度旋转按钮效果  Bpmn 2.0的XML文件怎么画流程图  佛山网站制作系统,佛山企业变更地址网上办理步骤?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  ,网站推广常用方法?  建站10G流量真的够用吗?如何应对访问高峰?  公司网站制作价格怎么算,公司办个官网需要多少钱?  宝塔面板如何快速创建新站点?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  Android使用GridView实现日历的简单功能  官网建站费用明细查询_企业建站套餐价格及收费标准指南  Swift中switch语句区间和元组模式匹配  小型网站建站如何选择虚拟主机?  如何配置支付宝与微信支付功能?  如何选择域名并搭建高效网站?  微信小程序 五星评分(包括半颗星评分)实例代码  ,如何利用word制作宣传手册?  如何在Ubuntu系统下快速搭建WordPress个人网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  制作网站的基本流程,设计网站的软件是什么?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  ,怎么在广州志愿者网站注册?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何通过wdcp面板快速创建网站?  css网站制作参考文献有哪些,易聊怎么注册? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。