全网整合营销服务商

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

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

Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能

需要做一个仿淘宝客户端ViewPager滑动到最后一页,再拖动的时候跳到详情的功能,刚开始没什么思路,后来搜了一下,发现有好几种实现方法,最好的一种就是在ViewPager图片的后面再加一个view,然后滑动viewpager的时候,判断一下就行了。
附一个链接,我写的代码就是参考的这个,稍微改了一点点,先看看效果图。

实现起来比较简单,先写一个滑动加载详情的布局,然后在viewpager的instantiateItem里面判断一下,如果是最后一张,就显示加载详情的那个布局。不过需要注意的是,viewpager的getCount()返回的是list.size()+1,因为多了一个布局。
下面看看代码里面的几个方法。

在PagerAdapter的instantiateItem里面加载布局,判断一下position,如果小于图片数组,就是图片布局,如果大于了数组的长度(为什么会大于,因为前面已经说了,getCount返回的+1了的),就返回那个滑动跳转的布局。

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
 if (position < images.length) { 
  ImageView imageView = new ImageView(MainActivity.this); 
  ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dip2px(300)); 
  imageView.setLayoutParams(lp); 
  imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
  imageView.setImageResource(images[position]); 
  container.addView(imageView); 
  return imageView; 
 } else { 
  View hintView = LayoutInflater.from(container.getContext()).inflate(R.layout.more_view, container, false); 
  slideText = (TextView) hintView.findViewById(R.id.tv); 
  arrowImage = (ImageView) hintView.findViewById(R.id.iv); 
  container.addView(hintView); 
  return hintView; 
 } 
} 

 只要这样写了,就可以看到一个大概的效果了,然后主要就是viewp的OnPageChangeListener里面的东西了。主要思路就是,当在最后一张图片时,只要再次往左滑动,滑动到一定距离,就触发跳转的事件,然后,只要是在最后一张图片,是在向左滑动,松开手时,都要让viewpager选中最后一张图片那里,不能是滑动到了新加的那个布局去了。

在看看ViewPager.OnPageChangeListener具体的代码是怎么样的。

public class ViewPagerOnPageChangeListener implements ViewPager.OnPageChangeListener { 
  int currPosition = 0; // 当前滑动到了哪一页 
  boolean canJump = false; 
  boolean canLeft = true; 
  boolean isObjAnmatitor = true; 
  boolean isObjAnmatitor2 = false; 
  @Override 
  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
   if (position == (images.length-1)) { 
    if (positionOffset > 0.35) { 
     canJump = true; 
     if (imageAdapter.arrowImage != null && imageAdapter.slideText != null) { 
      if (isObjAnmatitor) { 
       isObjAnmatitor = false; 
       ObjectAnimator animator = ObjectAnimator.ofFloat(imageAdapter.arrowImage, "rotation", 0f, 180f); 
       animator.addListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         super.onAnimationEnd(animation); 
         imageAdapter.slideText.setText("松开跳到详情"); 
         isObjAnmatitor2 = true; 
        } 
       }); 
       animator.setDuration(500).start(); 
      } 
     } 
    } else if (positionOffset <= 0.35 && positionOffset > 0) { 
     canJump = false; 
     if (imageAdapter.arrowImage != null && imageAdapter.slideText != null) { 
      if (isObjAnmatitor2) { 
       isObjAnmatitor2 = false; 
       ObjectAnimator animator = ObjectAnimator.ofFloat(imageAdapter.arrowImage, "rotation", 180f, 360f); 
       animator.addListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         super.onAnimationEnd(animation); 
         imageAdapter.slideText.setText("继续滑动跳到详情"); 
         isObjAnmatitor = true; 
        } 
       }); 
       animator.setDuration(500).start(); 
      } 
     } 
    } 
    canLeft = false; 
   } else { 
    canLeft = true; 
   } 
  } 
  @Override 
  public void onPageSelected(int position) { 
   currPosition = position; 
  } 
  @Override 
  public void onPageScrollStateChanged(int state) { 
   if (currPosition == (images.length-1) && !canLeft) { 
    if (state == ViewPager.SCROLL_STATE_SETTLING) { 
     if (canJump) { 
      Toast.makeText(MainActivity.this, "跳转啦", Toast.LENGTH_SHORT).show(); 
     } 
     new Handler().post(new Runnable() { 
      @Override 
      public void run() { 
       // 在handler里调用setCurrentItem才有效 
       viewPager.setCurrentItem(images.length-1); 
      } 
     }); 
    } 
   } 
  } 
 } 

 逻辑不算复杂,主要是OnPageChangeListener里面三个方法加的一些判断。

看到参考的那篇文章里面评论很多人在要源码,我在这里把我写的分享一下,欢迎大家指导。源码下载。

另外还有一个比较好的viewpager效果就是,同时显示三个item,然后滑动到最后一个图片时,让那个向左滑的小箭头露出了,让用户知道这个viewpager还可以继续滑动,体验稍微好一点。

这个效果实现起来也非常简单,只需要设置viewpager的marginRight和marginLeft,然后给viewpager和它的父控件加上Android:clipChildren="false"就行了。

以上所述是小编给大家介绍的Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # viewpager  # 滑动跳转  # Android自定义ViewGroup实现淘宝商品详情页  # Android仿淘宝商品详情页  # Android自定义LinearLayout实现淘宝详情页  # Android 仿淘宝、京东商品详情页向上拖动查看图文详情控件DEMO详解  # Android仿淘宝商品详情页效果  # 跳转  # 的是  # 跳到  # 是在  # 加载  # 淘宝  # 我写  # 小编  # 就行了  # 几个  # 去了  # 还可以  # 最好的  # 片时  # 在此  # 说了  # 很多人  # 给大家  # 比较好  # 还有一个 


相关文章: 如何在Windows环境下新建FTP站点并设置权限?  如何在云服务器上快速搭建个人网站?  如何快速搭建支持数据库操作的智能建站平台?  javascript基本数据类型及类型检测常用方法小结  建站之星代理商如何保障技术支持与售后服务?  外贸公司网站制作哪家好,maersk船公司官网?  盘锦网站制作公司,盘锦大洼有多少5G网站?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何在新浪SAE免费搭建个人博客?  如何快速生成橙子建站落地页链接?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  建站之星各版本价格是多少?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  香港服务器选型指南:免备案配置与高效建站方案解析  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何用西部建站助手快速创建专业网站?  如何选择网络建站服务器?高效建站必看指南  建站之星图片链接生成指南:自助建站与智能设计教程  如何通过PHP快速构建高效问答网站功能?  北京网站制作公司哪家好一点,北京租房网站有哪些?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何破解联通资金短缺导致的基站建设难题?  建站主机是什么?如何选择适合的建站主机?  c++ stringstream用法详解_c++字符串与数字转换利器  如何构建满足综合性能需求的优质建站方案?  智能起名网站制作软件有哪些,制作logo的软件?  深圳网站制作培训,深圳哪些招聘网站比较好?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  网站制作服务平台,有什么网站可以发布本地服务信息?  如何选择域名并搭建高效网站?  长沙做网站要多少钱,长沙国安网络怎么样?  如何选购建站域名与空间?自助平台全解析  建站之星安装提示数据库无法连接如何解决?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  音乐网站服务器如何优化API响应速度?  如何快速搭建FTP站点实现文件共享?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  建站主机解析:虚拟主机配置与服务器选择指南  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  c# await 一个已经完成的Task会发生什么  建站VPS选购需注意哪些关键参数? 

您的项目需求

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