Android开发之仿淘宝商品详情页

看到有人在问如何实现淘宝商品详情页效果,手痒了就撸了一个,献上效果图

大致梳理一下思路,这里不提供源码

状态栏透明使用开源库StatusBarCompat,为了兼容手机4.4

dependencies {compile ('com.github.niorgai:StatusBarCompat:2.1.4', {exclude group: 'com.android.support'})}allprojects {repositories {...maven { url "https://jitpack.io" }}}

标题栏图标透明度变化参考Api setAlpha()已过时

 icon.setImageAlpha(0);

Banner控件为ViewPager,淘宝显示为正方形,这里需要修改ViewPager measure函数


public class IdeaViewPager extends ViewPager {private Point point;public IdeaViewPager(Context context) {this(context,null);}public IdeaViewPager(Context context, AttributeSet attrs) {super(context, attrs);WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);point = new Point();windowManager.getDefaultDisplay().getSize(point);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);setMeasuredDimension(point.x,point.x);}
}

测量View高度,获取到高度集合绑定到ScrollView,根据ScrollView滑动距离判断是属于哪一个Tab选项

public int getMeasureHeight(View view){int width = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);int height = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);view.measure(width, height);return view.getMeasuredHeight();}

重新onScrollChanged函数,实现ViewPager滑动速度比其他View慢

  @Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);if (viewPager != null && t != oldt) {viewPager.setTranslationY(t/2);}}

根据限定距离(Banner)计算百分比偏移量,实现颜色渐变、透明度渐变(淘宝商品详情页有二次颜色渐变)

 @Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);if(viewPager!=null&&t<=point.x-headerHeight&&getOnScrollChangedColorListener()!=null){getOnScrollChangedColorListener().onChanged(Math.abs(t)/Float.valueOf(point.x-headerHeight));if(t<=(point.x-headerHeight)/2){getOnScrollChangedColorListener().onChangedFirstColor(t/(point.x-headerHeight)/2);}else{getOnScrollChangedColorListener().onChangedSecondColor((t-(point.x-headerHeight)/2)/(point.x-headerHeight)/2);}}int currentPosition = getCurrentPosition(t,arrayDistance);if(currentPosition!=position&&getOnSelectedIndicateChangedListener()!=null){getOnSelectedIndicateChangedListener().onSelectedChanged(currentPosition);}this.position = currentPosition;}

单一颜色渐变透明度,还原argb通道,修改a值

 ideaScrollView.setOnScrollChangedColorListener(new IdeaScrollView.OnScrollChangedColorListener() {@Overridepublic void onChanged(float percentage) {int color = getAlphaColor(percentage>0.9f?1.0f:percentage);header.setBackgroundDrawable(new ColorDrawable(color));radioGroup.setBackgroundDrawable(new ColorDrawable(color));icon.setImageAlpha((int) ((percentage>0.9f?1.0f:percentage)*255));radioGroup.setAlpha((percentage>0.9f?1.0f:percentage)*255);setRadioButtonTextColor(percentage);}@Overridepublic void onChangedFirstColor(float percentage) {}@Overridepublic void onChangedSecondColor(float percentage) {}});ideaScrollView.setOnSelectedIndicateChangedListener(new IdeaScrollView.OnSelectedIndicateChangedListener() {@Overridepublic void onSelectedChanged(int position) {isNeedScrollTo = false;radioGroup.check(radioGroup.getChildAt(position).getId());isNeedScrollTo = true;}});public int getAlphaColor(float f){return Color.argb((int) (f*255),0x09,0xc1,0xf4);}

Tab选项属性不能太频繁,会有颜色值闪烁情况出现,这里需要策略

 public void setRadioButtonTextColor(float percentage){if(Math.abs(percentage-currentPercentage)>=0.1f){for(int i=0;i<radioGroup.getChildCount();i++){RadioButton radioButton = (RadioButton) radioGroup.getChildAt(i);radioButton.setTextColor(radioButton.isChecked()?getRadioCheckedAlphaColor(percentage):getRadioAlphaColor(percentage));}this.currentPercentage = percentage;}}

判断当前属于哪个选项,根据滑动距离与传入绑定的View高度集合来计算

private int getCurrentPosition(int t, ArrayList<Integer> arrayDistance) {int index = 0;for (int i=0;i<arrayDistance.size();i++){if(i==arrayDistance.size()-1){index = i;}else {if(t>=arrayDistance.get(i)&&t<arrayDistance.get(i+1)){index = i;break;}}}return index;}

切换选项卡以及回到顶部按钮的具体实现参考scrollTo函数

private void scrollToPosition(int position){scrollTo(0,arrayDistance.get(position));}

以上代码实现了上图效果,当然也可以使用RecyclerView AbsListView做容器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61740.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝获得详情页详细教程

请求参数 请求参数&#xff1a;num_iid681459303535&is_promotion1 参数说明&#xff1a;num_iid:淘宝商品ID is_promotion:是否获取取促销价 API接口工具 { "item": { "num_iid": "681459303535", "title&qu…

淘宝商品详情页api

采集淘宝商品列表和商品详情遇到滑块验证码的解决方法&#xff08;带SKU和商品描述&#xff0c;可高并发&#xff09;&#xff0c;主要是解决了高频情况下的阿里系滑块和必须要N多小号才能解决的反扒问题&#xff0c;以后都可以使用本方法了。 大家都知道&#xff0c;淘宝的反爬…

用计算机玩王者荣耀,王者荣耀你们用电脑玩王者荣耀顺手吗? - 游戏发言 - 酷酷跑手机游戏...

我感觉有一点不顺手&#xff0c;那我也是一个职业&#xff0c;专门玩撸啊撸的玩家&#xff0c;但是呢&#xff0c;我就觉得王者荣耀这款游戏不应该搬上电脑这个平面上。王者荣耀是手游它搬上电脑给了诸多英雄&#xff0c;造成不便。比如其中的李白&#xff0c;难道你在李白释放…

王者荣耀太空人名字怎么弄 王者荣耀太空人名字设置方法

在玩王者荣耀游戏时很多人都会遇到一些有趣的名字&#xff0c;比如空白名、彩色名&#xff0c;甚至是会动的名字&#xff0c;而最近王者荣耀就出现了会动的太空人名字&#xff0c;那么&#xff0c;王者荣耀太空人名字怎么弄?下面来看看王者荣耀太空人名字设置方法吧。 王者荣…

苹果微信王者荣耀哪个服务器人多,王者荣耀:QQ区和微信区哪个玩家多?看完会明白...

原标题&#xff1a;王者荣耀&#xff1a;QQ区和微信区哪个玩家多&#xff1f;看完会明白 导读&#xff1a;王者荣耀&#xff1a;QQ区和微信区哪个玩家多&#xff1f;看完会明白 文|刺激小宇哥 阅读到这篇文章的各位趣友大家好&#xff01;游戏无时无刻的丰富着我们的生活&#…

服务器匹配原理,王者荣耀实现原理学习笔记

原作来自腾讯游戏学院 以下是原文部分节选 一、服务器架构 “房间模式” 房间类玩法和MMORPG有很大不同: 1.广播单元的不确定性 2.广播数量很小 3.需要匹配一台房间服务器让少数人进入同一个服务器 这一类游戏最重要的是其“游戏大厅”的承载量,每个“游戏房间”受逻辑所限,…

微信不同服务器能匹配吗,王者荣耀:玩家匹配到自己,体验服微信区和QQ区是互通的?...

原标题&#xff1a;王者荣耀&#xff1a;玩家匹配到自己&#xff0c;体验服微信区和QQ区是互通的&#xff1f; 不少玩家希望官方能够将微信和QQ区的数据打通&#xff0c;但官方的回复是技术无法做到&#xff0c;玩家们也只能因此作罢。近日有游戏博主称&#xff0c;自己王者荣耀…

如何一小时登上微信头脑王者王者段位

废话不多说&#xff0c;直接切入正题。 准备 连接于同一无线网络下的电脑一台、手机一部。 打开下面的网址&#xff0c;下载我们要用的到文件。 https://gitee.com/BroChicken/brain //【GitHub太高级了玩不来&#xff0c;就用了Gitee&#xff08;码云&#xff09;】 点击附件…

训练AI 玩王者荣耀,这算不算开挂?!(附源码)

用自己训练的AI玩王者荣耀 基于深度学习框架pytorch编写&#xff08;resnet101GPT&#xff09;&#xff0c;目前只是验证演示&#xff0c;因为训练数据少以及还没有进入强化学习阶段所以水平不高。 本源码模型主要用了SamLynnEvans Transformer 的源码的解码部分。以及pytorc…

数据分析软件解读王者荣耀一年的“王者”成绩单

玩手游的孩子应该都听过“王者农药”&#xff08;王者荣耀&#xff09;&#xff0c;小编也觉得此游戏&#xff0c;有毒&#xff0c;导致见面第一句话变成了&#xff0c;组团开黑啊&#xff01; 这档游戏有多火&#xff1f;看Power-BI 数据分析软件分析出的数据你就知道了。有人…

我和AI打了六局王者荣耀,心态崩了

十三 发自 凹非寺量子位 报道 | 公众号 QbitAI 今天&#xff0c;我和AI绝悟打了6局王者荣耀&#xff0c;心态有点崩。 没赢过&#xff1f;不&#xff0c;比分3:3打平&#xff0c;还拿过MVP。 那怎么就崩溃了&#xff1f;听我慢慢道来。 PVP对战手游王者荣耀在五一节期间上线了一…

王者荣耀安卓微信有什么服务器,王者荣耀:QQ和微信区哪个好?看排行榜就知道,别不懂清楚转区...

大家都知道&#xff0c;王者荣耀同时拥有安卓和IOS两大区服&#xff0c;它们的每日在线人数都是极其庞大的&#xff0c;而一直以来&#xff0c;关于QQ区和微信区谁强谁弱一直都是玩家们争辩的主要话题。有网友断言&#xff1a;QQ区本来就强&#xff0c;职业选手多&#xff0c;微…

王者荣耀战力查询微信小程序源码下载支持安卓苹果微信Q等多区查询

这是一款战力查询的微信小程序源码 源码内自带了接口 目前支持了微信,Q,苹果,安卓全区都可以查询 ,而且搭建安装简单 使用微信开发者工具打开源码然后设置一下合法域名上传审核即可 该小程序还有战区修改教程等等,具体功能等你来挖掘 另外该小程序无需服务器和域名,让你无…

微信小程序:王者荣耀战力查询微信小程序源码下载支持安卓苹果微信QQ等多区查询

这是一款战力查询的微信小程序源码 源码内自带了接口 目前支持了微信,QQ,苹果,安卓全区都可以查询 支持流量主收益,而且搭建安装简单 使用微信开发者工具打开源码然后设置一下合法域名上传审核即可 该小程序还有战区修改教程等等,具体功能等你来挖掘 另外该小程序无需服务…

王者荣耀改名神器助手微信小程序

这是一个强大的改名神器,强大的生成功能 输入您想要制作的名字可以一键生成N个重复名供您选择 这样就不用担心有些重复名被别人使用了导致无法使用 另外还有英雄昵称,提供多种昵称分类自动生成 比如情侣名字,英雄名字等等(到时候大家看小编演示图即可了解) 支持一键生成N个…

王者荣耀微信一区的服务器没了,为什么王者荣耀微信区和QQ区玩起来像两个游戏?...

我真是被微信区的大叔大妈坑到没脾气……而且有一说一&#xff0c;微信区不仅智商不在线的人很多&#xff0c;还有很多很迷惑的人&#xff0c;根本看不懂他在玩什么也看不懂他想干什么&#xff0c;像人机一般。qq区的人虽然浪&#xff0c;但是傻逼和迷惑的人不多&#xff0c;基…

20+顶尖高校同时开打《王者荣耀》!实际上是一场科研battle,你能信?

金磊 假装发自 王者峡谷量子位 报道 | 公众号 QbitAI 不是吧&#xff0c;不是吧。 一群学霸聚集在一起&#xff0c;竟然是为了打《王者荣耀》&#xff1f;&#xff01; 而且还是来自清北、中科院、浙大等20余所顶级学府的那种。 但毕竟是一帮学霸们的“聚会”&#xff0c;果然连…

王者荣耀战力在线查询小程序源码

介绍&#xff1a; 支持打包成APP版本支持QQ微信双端小程序 支持微信QQ安卓IOS战力查询 网盘下载地址&#xff1a; http://kekewl.cc/fg0D7sq2e5M0 图片&#xff1a;

AI 玩王者荣耀狂上分!打了六局,心态崩了

你造吗&#xff1f;人工智能继进军围棋之后&#xff0c;又来我“王者峡谷”了。 腾讯AI LAB与王者荣耀合作开发的AI【绝悟】&#xff0c;在最高规格赛事中获胜&#xff0c;宣布已达到“电竞职业水平”&#xff01;据称&#xff1a;【绝悟】一天的训练强度&#xff0c;高达人类4…

王者荣耀战区活跃度排名怎么实现的?这篇文章给你答案!

&#x1f349;博客主页:阿博历练记 &#x1f4d6;文章专栏:数据结构与算法 &#x1f68d;代码仓库:阿博编程日记 &#x1f365;欢迎关注:欢迎友友们点赞收藏关注哦&#x1f339; 文章目录 &#x1f308;前言&#x1f36a;堆的实现&#x1f50d;1.堆的结构框架&#x1f50d;2.堆…