标题滑动隐藏,滑动中背景图标变化,仿淘宝商祥

Android高级UI之仿淘宝首页嵌套滑动及吸顶效果实现 一、布局结构设计及实现 仿淘宝首页的嵌套布局,TabLayout 上面放置一个 RecyclerView 模拟嵌套效果(TopRecyclerView 只是继承 RecyclerView 填充了几条静态数据,其他未做任何处理),ViewPager的Fragment 中只有一个 RecyclerView 控件,整体的布局是 ScrollView + RecyclerView + TabLayout + ViewPager + Fragment + RecyclerView。 <?xml version= 阅读详情
先申明菜鸟一枚,有不对的地方欢迎大神指正。编辑的主要目的是记录下最近做的一些效果。仿淘宝商祥标题下拉滑动时的渐变,滑到详情时详情的标题栏固定不动由详情的内容继续滑动。效果如图:

这里写图片描述
先分两个部分一是滑动的时候改变标题透明度和图标,二是滑动到图文时接管滑动事件。
1.滑动到图文时图文这一行固定
布局这边最外层是RelativeLayout,用于将标题浮于上层。
这里写图片描述
中间LinearLayout里面是嵌套自定义的MyScrollView,代码

public class MyScrollView extends ScrollView {

    private Handler mHandler;

    /**
     * 2017/0713
     */
    public interface ScrollViewListener {

        void onScrollChanged(MyScrollView scrollView, int x, int y,
                             int oldx, int oldy);

    }

    private ScrollViewListener scrollViewListener = null;

    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    /**
     * end
     */
    public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context) {
        super(context);
    }

    public void setHandler(Handler handler) {
        mHandler = handler;
    }

    public boolean isAtBottom() {

        return getScrollY() == getChildAt(getChildCount() - 1).getBottom()
                + getPaddingBottom()  - getHeight();
    }

    public int getHeihgtToTitle(){
        return  getChildAt(getChildCount() - 1).getBottom()
                + getPaddingBottom()  - getHeight();
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mHandler != null) {
            if (isAtBottom()) {
                mHandler.sendEmptyMessage(0);
            } else {
                mHandler.sendEmptyMessage(1);
            }
        }
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, l, t, oldl, oldt);
        }
    }
}

主要有两点,一个是通过getScrollY() == getChildAt(getChildCount() - 1).getBottom()+ getPaddingBottom() - getHeight() 来判断图文详情是否滑动到了顶部,通过

if (mHandler != null) {
            if (isAtBottom()) {
                mHandler.sendEmptyMessage(0);
            } else {
                mHandler.sendEmptyMessage(1);
            }
        }

来发消息,并在activity中处理:

    ((MyScrollView) mScrollView).setHandler(new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what == 0) {
                    if (mDetailFragment != null) {
                        mDetailFragment.scrollToBottom(true);
                        mTab.setVisibility(View.VISIBLE);
                    }
                } else if (msg.what == 1) {
                    if (mDetailFragment != null) {
                        mDetailFragment.scrollToBottom(false);
                        mTab.setVisibility(View.GONE);
                    }
                }
            }
        });

这里mTab指的是
这里写图片描述
当图文详情的fragment滑动到顶部时会在方框处显示一个图文参数评价一样的线性布局盖住之前的图文这一行使其实现固定在标题下边的效果,图文详情实为一个webview,这时候由webview去接管滑动。
.scrollToBottom(true) 方法中在fragment里根据是否滑动到底部来做滑动事件的处理:
这里写图片描述

到这里实现滑到图文时图文这一行固定然后继续滑动webview。
2.滑动时标题变化
自定义ScrollView中返回了onScrollChanged的回调和图文到底部的距离也就是变化的范围是从0 到这个距离的过程中去渐变。

public int getHeihgtToTitle(){
        return  getChildAt(getChildCount() - 1).getBottom()
                + getPaddingBottom()  - getHeight();
    }

有了滑动的范围和监听,就是在activity中去处理过程中的渐变了

@Override
    public void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy) {
        int distance = scrollView.getHeihgtToTitle();
        if (y <= 0) {   //设置标题的背景颜色
            mTitleView.setBackgroundResource(R.color.transparent);
            title_pic.setAlpha(0.0f);

            mIbShare.setAlpha(1f);
            mIbShare.setImageResource(R.drawable.image_product_share);

            go_up.setAlpha(1f);
            go_up.setImageResource(R.drawable.image_product_home);

            iv_back.setImageResource(R.drawable.image_product_back);
            iv_back.setAlpha(1f);

        } else if (y > 0 && y <= distance) {
            //滑动距离小于图文的高度时,设置背景颜色透明度渐变
            float scale = (float) y / distance;
            float alpha = (255 * scale);
            mTitleView.setBackgroundColor(Color.argb((int) alpha, 255,255,255));
            title_pic.setAlpha(scale);

            mIbShare.setAlpha(scale);
            mIbShare.setImageResource(R.drawable.image_product_share_selector);

            go_up.setImageResource(R.drawable.image_product_home_selector);
            go_up.setAlpha(scale);

            iv_back.setImageResource(R.drawable.image_product_back_two);
            iv_back.setAlpha(scale);

//          判断到中间区域时改变图片
//          if (((distance/2)-50)< y && y< ((distance/2)+50)){
//              mIbShare.setImageResource(R.drawable.image_product_share_selector);
////                mIbShare.setAlpha((float) 0.0);
////
////                go_up.setAlpha((float) 0.0);
//              go_up.setImageResource(R.drawable.image_product_home_selector);
//
//          }else{
//              mIbShare.setImageResource(R.drawable.image_product_share);
//              go_up.setImageResource(R.drawable.image_product_home);
//          }

//          判断在上半部分显示-->隐藏,先半部分隐藏-->显示
//          if(y < distance/2){
//              float a = (float) y/(distance/2);
//              float scale2 = 1-a;
//              Log.i("apple",a+"---我是小于------");
//              mIbShare.setAlpha(scale2);
//
//              go_up.setAlpha(scale2);
//          }else {
//              float b =(float)(distance/2)/ y;
//              float scale3 = 1-b;
//              Log.i("apple",b+"---我是大于------");
//              mIbShare.setAlpha(scale3);
//
//              go_up.setAlpha(scale3);
//          }

        } else {    //滑动到图文下面设置普通样式
            mTitleView.setBackgroundColor(Color.argb((int) 255, 255,255,255));
            title_pic.setAlpha((float) 1);

            mIbShare.setImageResource(R.drawable.image_product_share_selector);
            mIbShare.setAlpha((float)1);

            iv_back.setImageResource(R.drawable.image_product_back_two);
            iv_back.setAlpha((float) 1);

            go_up.setImageResource(R.drawable.image_product_home_selector);
            go_up.setAlpha((float)1);
        }
    }

可以看到一开始设置标题栏全透明,此时的图标是第一套图,在y > 0 && y <= distance的过程中去逐渐加深标题透明度同时换第二套图。(注释的代码是尝试实现淘宝标题图片在滑动区间的一半的时候第一套图先渐隐,然后第二套图再渐现,我在这个距离的二分之一做判断但是出来的效果并不好这里只能放弃了,有大神实现的希望能学校下)

到这里实现功能,注意点在于渐变范围的获取,图文到顶部的判断和发消息,滑动事件的由scrollview还是webview接管以及滑动过程中的渐变。这里时间问题没有拆出来写个demo以后有时间会补充,主要代码以摘出,欢迎交流。

WebAgent:基于视觉-动作联合建模的网页自动化代理 网页自动化是实现重复性任务提效的核心技术,其本质是让程序理解界面语义、定位交互元素并执行可靠动作。传统方案依赖HTML文本解析,易受动态class、SPA渲染和遮挡干扰;而新一代方法如WebAgent转向视觉-动作联合建模,通过融合截图与结构化DOM输入,输出CLICK、TYPE等原子指令,并结合轻量视觉反馈实现闭环修正。该范式显著提升跨网站鲁棒性,已在电商比价、SaaS巡检、简历初筛等场景落地验证。关键词涵盖网页自动化、LLM指令遵循,代表了大模型从‘回答问题’迈向‘动手做事’的关键演进。 阅读详情

相关推荐

电商导航系统重构:四核三维实时决策模型解析

电商导航已从静态菜单演进为用户行为的实时决策系统。其核心是意图识别、场景适配、路径压缩与反馈闭环四大技术内核,协同建模空间、时间、认知三大用户维度,实现从‘找入口’到‘预判意图’的本质跃迁。该模型显著提升路径效率与心智匹配度,广泛应用于大促提效、新用户留存、跨端一致性等关键场景。本文深入拆解淘宝‘四核三维’导航架构的设计逻辑、落地验证方法与工程化避坑实践,为复杂电商平台的UI系统级升级提供可复用的方法论框架。

unixboy 433

Android 仿JD浏览商品。滑动头部隐藏显示

仿JD浏览商品,实现头部导航上滑隐藏,导航悬浮,下滑头部显示 android5.0新特性,需要用到 android.support.design.widget.CoordinatorLayout android.support.design.widget.AppBarLayout 需要在AppBarLayout设置中设置属性。android:fitsSystemWindows=

li5685918的博客 1万+

Android应用开发为何是中小企业数字化落地的首选路径

移动应用开发是企业触达用户的核心载体,而Android凭借超70%的全球市场份额和开放可控的生态,成为初创与中小企业低成本、高确定性构建私域流量、沉淀数据资产、提升运营效率的首选平台。其原生能力支撑精准通知、本地化适配、系统级API调用与深度硬件集成,显著降低用户获取成本(CAC)并强化品牌信任感。相比跨平台方案,原生Android(Kotlin)在性能敏感、交互复杂及合规要求高的业务场景中具备更高长期ROI。本文聚焦中小企业真实落地经验,解析从MVP验证、冷启动策略到兼容性优化的全链路实践逻辑。

weixin_30338481的博客 3676

Android 仿照淘宝首页 Tab 切换效果(滑动到底部变化图片 ,点击图标滑动到顶部)

序、首页要仿淘宝一个效果 ,IOS 网上哪一个 Demo 就直接用了 。我是很讨厌拿来主义的(其实是在网上没找到demo 哈哈哈哈) ,我就自己写了 。 淘宝效果 Demo 效果图 ...

Super 含 的博客 2595

Sqribble文档自动化原理:从模板到PDF的工程化流水线

文档自动化正从简单排版工具升级为结构化内容交付系统。其核心在于将文档解构为可编程的布局规则、语义清洗引擎、确定性渲染逻辑与交互式沙盒编辑器——这本质上是将传统出版流程工程化、标准化的过程。基于云原生架构,它通过模板参数化、内容结构映射(IDM模型)、分页与层级规则驱动,实现跨源文本(Word/URL/Markdown)到合规PDF的稳定输出。技术价值体现在鲁棒性处理脏数据、零返工批量生成、品牌样式全局可控;典型应用于市场白皮书批量制作、课程笔记转交互手册、客户SOP协同审阅等高频重复场景。本文深入解析Sqr

weixin_30703911的博客 403

豆包2026实战手册:免费、实时、多模态的AI工作流重构

AI工具的本质不是模型有多强,而是能否无缝嵌入真实工作流——这正是‘多模态’与‘实时’两大技术范式的核心价值。当AI能同步理解语音、图像、文本并动态调用本地+云端算力,它就不再需要你学习提示词,而是直接响应‘写周报’‘理会议’‘比价格’等具体动作。豆包2026通过端侧轻量化推理、动态意图识别和全链路状态记忆,将AI能力藏进按钮背后,实现零学习成本的工程落地。其免费专家模式、边想边搜、微信语境理解等能力,已覆盖办公、创作、生活三大高频场景,成为真正可‘装完即用’的生产力操作系统。

weixin_34198762的博客 422

仿淘宝view滑动至屏幕顶部会一直停留在顶部的位置

在刚刚完成的项目中,在一个页面中,用户体验师提出引用户操作的入住按钮要一直保留在页面当中,不管页面能滚动多长都得停留在页面的可视区域。最终实现效果如下图所示:

ff20081528的专栏 1万+

仿淘宝商品列表的上推隐藏工具栏下拉显示工具栏

模仿仿淘宝商品列表的上推隐藏工具栏下拉显示工具栏

Open-AutoGLM功能测评:多模态理解到底准不准?

本文介绍了如何在星图GPU平台上自动化部署Open-AutoGLM – 智谱开源的手机端AI Agent框架镜像,实现手机界面多模态理解与自动化操作。该镜像可精准识别图标、文字及交互元素,典型应用于APP内自动化任务执行,如微信消息转发、淘宝商品加购、小红书图片保存等高频场景。

weixin_36364707的博客 362

仿淘宝详情,下拉显示历史商品demo

仿淘宝详情,下拉显示历史商品demo

标题头滑动渐变,类似淘宝美团标题头;

RecyclerView滑动渐变,原理是改变透明度;其他的滑动布局也可以参照这个方法来实现;

分享76个鼠标特效,总有一款适合您

分享76个鼠标特效,总有一款适合您

adendean的博客 2257

Agent 操作系统:未来的 Harness 平台

在大模型技术爆发的当下,自主智能体(Agent)已经成为AI原生应用的核心载体,但当前Agent开发面临着碎片化严重、运维难度高、规模化落地难三大核心痛点,就像1970年代没有通用操作系统的裸机编程时代,开发者需要重复造轮子解决底层基础设施问题。本文将深度解析Agent操作系统(Agent OS)作为AI原生时代的底层基础设施的核心定位,以及下一代Harness平台如何将Agent OS与成熟的DevOps、CI/CD、可观测性、成本管理能力深度融合,成为AI原生应用全生命周期管理的统一平台。

软件工程实践的博客 278

黑马视频HarmonyOS零基础

本文章是根据黑马程序员鸿蒙 HarmonyOS NEXT星河版零基础入门到实战00-鸿蒙开发环境准备_哔哩哔哩_bilibili记录HarmonyOS的基础。该视频真的非常适合有点了解前端的小伙伴学习,里面有很多最基础的东西。有的小伙伴看这个视频就非常的容易理解,直接看以下的笔记,认真过一遍就可以了。以下是我的练习仓库:HarmonyOS-learn: 对HarmonyOS的基础学习记录 (gitee.com)后续将持续更新该视频的笔记。

qq_59598977的博客 1790

1.毫米波雷达心率、呼吸原理实现(一)实例

毫米波雷达心率、呼吸检测原理本项目分两到三篇文章写完,第一阶段借鉴TI开源项目以及根据自己的见解适当更改信号处理链通过AWR1843汽车雷达传感器和DCA1000采集卡采集数据完成人体呼吸和心跳检测算法的实现。第二阶段将仿真成功的代码搬移TIAWR1843传感器并通过串口数据实现生命体征的实时处理。本文即为第一阶段实现过程。本文首先概述毫米波雷达呼吸心跳检测的原理,紧接着概述本项目信号处理流程,另外本项目第一阶段通过matlab仿真验证算法的有效性,仿真源码可关注小编并私信可取。1.概述。

Poulen的博客 2万+

FPGA时序约束:从时钟树到数据路径的深度解析与优化策略

本文深入解析FPGA时序约束的核心技术与优化策略,涵盖时钟树结构分析、时序报告解读和数据路径优化。重点探讨Vivado工具中的时序约束方法,包括时钟定义、异常约束和物理优化,帮助工程师掌握寄存器级时序分析和系统级协同设计,实现高性能FPGA设计。

u5v6w7的博客 652

UI-TARS手机自动化:告别重复点击,5分钟实现智能操作

自动化技术旨在通过预设规则或智能程序,替代人工执行重复性任务,其核心原理在于模拟用户交互与决策过程。在软件测试、数据采集和日常办公等领域,自动化能显著提升效率、降低错误率并释放人力。随着低代码和人工智能技术的发展,自动化工具正变得更易用和智能。UI-TARS作为一款代表性的跨平台桌面自动化工具,巧妙结合了图像识别与控件识别双引擎,通过可视化流程编排,让用户无需编码即可快速构建稳定的手机自动化脚本。本文聚焦于UI-TARS的实战应用,深入探讨其连接控制、流程设计及稳定性优化等关键环节,为希望实现业务流程自动化

weixin_34037173的博客 362

基于YOLOv8的违规抽烟/打电话检测系统:从数据集构建到部署实战

模型优点缺点精度高速度慢(5 FPS)SSD速度快小目标检测差YOLOv5平衡性好官方支持停止YOLOv8最新、最快、最准需要PyTorch环境YOLOv8相比前代:骨干网络升级(C2f模块)无锚框检测(Anchor-Free)动态任务对齐分配(TaskAlignedAssigner)支持分类/检测/分割/姿态估计。

YOLO 98

HarmonyOS 6效果实现:底部弹出式、居中卡片式、居中小确认框以及宽屏底部弹出式

引言随着HarmonyOS生态的持续演进,基于HarmonyOS API 24的应用开发迎来了全新的技术范式。在HarmonyOS 6.1.1版本中,HarmonyOS ArkTS API 24为开发者提供了更加丰富的声明式UI组件、更强大的状态管理机制以及更灵活的布局系统。本文将通过一个完整的室内绿植爱好者社区应用案例,深入剖析基于HarmonyOS API 24进行复杂界面构建的核心技术要点,涵盖数据模型设计、看板布局实现、弹框系统架构、原生图表绘制以及动效层设计等多个维度。在当今移动应用开发领域,声明

2501_92985290的博客 134

网口通信实战(C#完整版):基于TCP协议的工业仪表数据采集系统开发

工业现场中80%的智能仪表(压力/温度/液位/流量/数显仪表)、采集模块、测控终端均支持TCP网口通信,这类设备的TCP通信有鲜明的工业特性:基于字节流的自定义二进制协议、一问一答的主从通信模式、对数据完整性/稳定性要求极高。本次实战是纯工业级落地项目,基于C# WinForm + .NET Framework 4.8(工业上位机标配)✅纯原生无依赖:零第三方类库/控件,仅用C#原生,源码可100%复用、无引用冲突、工控机完美兼容;✅双采集模式完美适配:同时实现「单次手动采集」+「连续自动采集」

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1800

ThingsBoard教程(十九):规则节点概览介绍

在ThingsBoard的CE V2.5.6版本中,一共有这几种类型在每一种类都有包含了多个节点,每一种类型的节点都有不同的颜色表示本篇文章做一个简单的概括,后续的文章会详细讲解每一个种类的节点如何使用,每一个节点的使用。一共有10个,使用黄色表示 过滤器节点用于消息过滤和路由。一共有9个,使用绿色 属性节点用于更新传入消息的元数据。一共三个,使用蓝色 转换节点用于更改传入消息字段,如发起者、消息类型、有效负载和元数据。一共21个,使用红色标识 动作节点根据传入的消息执行各种动作。一共9个,使用黄色表示,

知无涯 1万+
上一篇: SwipeRefreshLayout初体验
下一篇: 仿唯品会尺码助手弹框 带箭头叉号的popupwindow BubbleLayout
min-vo-92
博客等级 码龄11年 6粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值