1.效果图

直接上效果图.

第一次录制gif,经验不足.网上搜索大家推荐licecap.尝试后的确不错,操作比较简单.但有一个细节需要注意,不能有中文路径.

2.实现思路

(1)总体思路:

滑动时,标题栏颜色发生渐变.标题栏点击后,定位到具体的位置.整个界面可以分为标题栏、界面2部分。而界面分为图片、评论、商户详情3部分.

(2)如何实现标题栏的渐变:

先在布局中写好,根据滑动位置的情况,将标题栏的颜色(包括字体颜色)有最浅的颜色,逐渐变成最终稳定的颜色(比如我的是黑色)

(3)如何实现点击标题后定位到具体位置:

说白一点,就是获取图片、评论、商户详情这三个控件的高度。点击事件后,滑动相应高度即可

3.实现细节

(1)布局

3.1.1公司使用的自定义ScrollView.
3.1.2.图片、评论、商户详情三部分控件的高度需要,布局中需要体现.具体代码见源码

(2)逻辑实现

3.2.1.自定义的ScrollView.
监听新旧横向、纵向的位置,通过接口回调的方式传递给activity进行相应操作.代码如下:

public class MyCustomScrollView extends ScrollView {public interface ScrollViewListener {void onScrollChanged(MyCustomScrollView scrollView, int x, int y,int oldx, int oldy);}private ScrollViewListener scrollViewListener = null;public MyCustomScrollView(Context context) {super(context);}public MyCustomScrollView(Context context, AttributeSet attrs,int defStyle) {super(context, attrs, defStyle);}public MyCustomScrollView(Context context, AttributeSet attrs) {super(context, attrs);}public void setScrollViewListener(ScrollViewListener scrollViewListener) {this.scrollViewListener = scrollViewListener;}@Overrideprotected void onScrollChanged(int x, int y, int oldx, int oldy) {super.onScrollChanged(x, y, oldx, oldy);if (scrollViewListener != null) {scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);}}}

3.2.2.标题栏的渐变
主要是相关api的调用,一个是.setBackgroundColor 和.setTextColor,另外一个是Color.argb
由于在图片控件区域标题栏渐变效果,所以需要进行相关计算:

 float scale = (float) y / 400;     //y是控件纵向高度.400为图片的高度float alpha = (255 * scale);

由于不能整除且尽量精准,我们使用float类型.颜色的GRB值范围是0-255.这个没啥好解释的

layout.setBackgroundColor(Color.argb((int) alpha, 250, 250, 250));
View1.setBackgroundColor(Color.argb((int) alpha, 0, 0, 0));
tvGoods.setTextColor(Color.argb((int) alpha, 0, 0, 0));
tvComment.setTextColor(Color.argb((int) alpha, 0, 0, 0));                tvDetails.setTextColor(Color.argb((int) alpha, 0, 0, 0));

3.2.3.控件的测量:
对于控件的测试,网上有比较多的资料,也比较杂,有的甚至是坑人的.下面链接这篇文章(相关链接.直接点击即可),无论是排版还是内容讲解,都很不错.对控件宽高测试不是很清楚的,可以看看.
在真实的项目中,一般第三种使用最多.代码如下:

        ViewTreeObserver mComment = comment.getViewTreeObserver();mComment.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {comment.getViewTreeObserver().removeGlobalOnLayoutListener(this);commentHeight = comment.getHeight();}});mGoods.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {goods.getViewTreeObserver().removeGlobalOnLayoutListener(this);commentHeightQD = goods.getHeight() - ScreenUtils.getStatusHeight(c) - ScreenUtils.dip2px(ProductDetailActivity.this, 40);scrollView.setScrollViewListener(ProductDetailActivity.this);}});

其中涉及一个小的细节知识点:dp与px.代码中的数值,一般都是dp,而我们需要的又是px,所以需要转换.

//根据手机的分辨率从 dp 的单位 转成为 px(像素)public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}

dp与px之间的转换网上的工具类比较多,大家在平时多积累对提高开发效率有好处

3.2.4.点击标题后定位到相应位置:
获取控件高度后,结合自定义scrollView的滚动接口回调,就可以实现.以点击"评论"为例:

tvComment.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handler2.post(new Runnable() {@Overridepublic void run() {scrollView.smoothScrollTo(0, commentHeightQD);}});}});

3.2.5.其他细节:
在UI界面滚动过程中,主要分为5部分.
一是进入界面时最初始的位置:
二是滑动距离小于商品图的高度时
三是当滑动超过商品图而小于评论
四是当滑动超过评论起始位置而小于评论结束位置
五是当滑动超过评论结束位置
其中,第一部分默认看不见.
第二部分是标题的渐变过程,逻辑见2.标题栏的渐变
第三、四、五逻辑是一模一样的,主要是哪个控件显示,哪个控件掩藏

 //设置标题的颜色为黑色,背景为白色可见private void setTitleColor() {layout.setBackgroundColor(Color.argb(255, 250, 250, 250));tvGoods.setTextColor(Color.argb(255, 0, 0, 0));tvComment.setTextColor(Color.argb(255, 0, 0, 0));tvDetails.setTextColor(Color.argb(255, 0, 0, 0));}private void clearAndShowThis(View currentView) {View1.setVisibility(View.INVISIBLE);View2.setVisibility(View.INVISIBLE);View3.setVisibility(View.INVISIBLE);View1.setBackgroundColor(Color.argb(255, 0, 0, 0));View2.setBackgroundColor(Color.argb(255, 0, 0, 0));View3.setBackgroundColor(Color.argb(255, 0, 0, 0));currentView.setVisibility(View.VISIBLE);}

4.源码下载

点击下载源码

如果您觉得这篇博客对您有帮助,star就是对我最大的鼓励!

高仿淘宝商品详情标题栏渐变相关推荐

  1. Andorid高仿淘宝商品详情滑动渐变标题栏

    效果展示 思路 先看结构图,根据滑动距离计算alpha 最外层是一个 NestedScrollView,监听Y轴滑动距离. 长的是一个titleBar,背景为透明色,滑动过程中由透明色变为白色 两边的 ...

  2. Android 仿淘宝商品详情标题栏变色,布局层叠效果

    如图效果 思路:如图可以将图片中布局分成三个部分,1标题栏透明背景,2上半部分布局,3下半部分布局,当我们向上拉动的时候,1布局实现渐变,从透明变到白色,2布局背景色渐变到白色,23布局随滚动条上拉, ...

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

    看到有人在问如何实现淘宝商品详情页效果,手痒了就撸了一个,献上效果图 大致梳理一下思路,这里不提供源码 状态栏透明使用开源库StatusBarCompat,为了兼容手机4.4 dependencies ...

  4. Android 仿淘宝商品详情页下拉足迹Demo

    DropDownMultiPager 仿淘宝等商品详情页下拉足迹效果SimpleDemo 可colne之后看MainActivity的调用,方便二次开发 依赖 compile 'com.nineold ...

  5. 仿淘宝商品详情-点击显示大图,可滑动

    现在在做一个商城类的项目: 大家都用过淘宝,需求就是要求仿淘宝的效果做一个, 直接上图 用到了一个项目PhotoView 大家运行一下看最后一个项目,把单一的图片显示改成VIewpager就好.

  6. 仿淘宝商品详情页图片滑动并且数字也跟着变化

    今天遇到需求需要做个淘宝那样的商品详情页如图(这里只差放图片了)支持移动端,当然用的是swiper.js支持左右滑动 上代码 html代码 <div class="swiper-con ...

  7. 仿淘宝商品详情页面Android

    [致谢]:qifengdeqingchen [博客地址]:http://blog.csdn.net/qifengdeqingchen/article/details/51659735 1.需求: 要实 ...

  8. 仿淘宝商品详情页TabLayout+ListView

    第一次写博客,我是一名Android的小码农写代码也有三四年了.有点好玩的跟大家分享一下 项目对商品详情页改版有新需求.顶部是一个渐变的Title包括"宝贝","详情&q ...

  9. Android之仿淘宝商品详情浏览效果

    一:先来几张效果图,没有弄gif动画,也就是商品详情滑动到底部继续上滑查看图文详情. 二:实现步骤: 1.自定义一个父容器ScrollViewContainer装载两个ScrollView. pack ...

最新文章

  1. 【青少年编程】【三级】计算成绩总和
  2. Hibernate 具体用法(自整理)
  3. yolov5损失函数笔记
  4. AI公开课:19.04.10颜水成—360副总裁《人工智能:观察与实践》课堂笔记以及个人感悟—191017再次更新
  5. 使用 pg_dump 迁移 postgresql
  6. NFC与RFID的原理及应用区别
  7. java 钉钉获取用户信息,JAVA maven项目如何使用钉钉SDK来获取token、用户
  8. django手机访问_Django从入门到大作业:2-见网页
  9. 花花酱leetcode 题目——搜索专题
  10. 在CentOs7上yum安装redis
  11. PAT乙级(1019 数字黑洞)
  12. 在页面显示html文件,把选择的文件显示在页面上 #1《 HTML5:文件 API 》
  13. 设计模式-适配器模式(Adapter)
  14. ajax可以获取作用域的值吗,javascript – 为什么ajax调用中的闭包可以访问外部作用域?...
  15. python的空语句_Python 函数返回空值
  16. 什么是数据标准化、中心化、归一化?SPSS又如何实现?
  17. 分享5个高质无损音乐网站,歌曲很丰富,爱听歌的小伙伴有耳福了
  18. Visual Studio 2015创建ASP.NET5项目“DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' 无法安装的错误...
  19. 详解:什么是NVMe?
  20. python程序设计,猜数游戏编程实践课程实验

热门文章

  1. 一个IT男的500强生涯
  2. 北京人都是什么文案鬼才,被他们的抗阳段子笑死了
  3. web常用模块的测试用例
  4. matlab彩色转灰度图代码,彩色图转灰度图 matlab 实现代码
  5. 美团也玩大数据杀熟?
  6. Python之条件竞争
  7. 数据库学习之num1
  8. 海尔全球十一连冠背后: 生态时代的无限游戏
  9. php静态页面制作,ps制作静态的html页面
  10. 职场上被人针对要不要告诉领导