需要做一个仿淘宝客户端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仿淘宝商品详情页效果
# 跳转
# 的是
# 跳到
# 是在
# 加载
# 淘宝
# 我写
# 小编
# 就行了
# 几个
# 去了
# 还可以
# 最好的
# 片时
# 在此
# 说了
# 很多人
# 给大家
# 比较好
# 还有一个
相关文章:
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何选购建站域名与空间?自助平台全解析
制作企业网站建设方案,怎样建设一个公司网站?
建站之星代理费用多少?最新价格详情介绍
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何用花生壳三步快速搭建专属网站?
如何快速搭建个人网站并优化SEO?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何用PHP快速搭建CMS系统?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何在建站之星绑定自定义域名?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
h5网站制作工具有哪些,h5页面制作工具有哪些?
山东网站制作公司有哪些,山东大源集团官网?
网站图片在线制作软件,怎么在图片上做链接?
宝塔建站助手安装配置与建站模板使用全流程解析
如何在阿里云部署织梦网站?
如何在云主机快速搭建网站站点?
nginx修改上传文件大小限制的方法
建站之星在线版空间:自助建站+智能模板一键生成方案
如何在云服务器上快速搭建个人网站?
广德云建站网站建设方案与建站流程优化指南
MySQL查询结果复制到新表的方法(更新、插入)
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何在IIS中新建站点并配置端口与物理路径?
如何选择靠谱的建站公司加盟品牌?
建站168自助建站系统:快速模板定制与SEO优化指南
网站代码制作软件有哪些,如何生成自己网站的代码?
如何设计高效校园网站?
金*站制作公司有哪些,金华教育集团官网?
如何在阿里云ECS服务器部署织梦CMS网站?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在Windows环境下新建FTP站点并设置权限?
北京网站制作的公司有哪些,北京白云观官方网站?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
制作网站的软件免费下载,免费制作app哪个平台好?
完全自定义免费建站平台:主题模板在线生成一站式服务
b2c电商网站制作流程,b2c水平综合的电商平台?
如何高效配置IIS服务器搭建网站?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
建站之星伪静态规则如何正确配置?
北京网站制作网页,网站升级改版需要多久?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
ui设计制作网站有哪些,手机UI设计网址吗?
香港服务器WordPress建站指南:SEO优化与高效部署策略
视频网站制作教程,怎么样制作优酷网的小视频?
C#如何序列化对象为XML XmlSerializer用法
*请认真填写需求信息,我们会在24小时内与您取得联系。