【Android 动画】随ScrollView滑动头部缩放动画(附demo)

Android炫酷的Toolbar+Bottom+Fab悬浮按钮显示、隐藏、渐变的各种实现姿势 前言  由于手机屏幕大小的限制,各种控件需要根据需求进行显示,隐藏,移动等,以增加视觉效果,用户体验。就拿目前市场上常见的APP如知乎、QQ、淘宝、美团等来说,在他们的APP里面随处可见一些比较优美的处理方案。本文主要将一些常见的需要对控件进行显示、隐藏、渐变的场景进行整理了一番。如:点击屏幕Toolbar,bottom的显示隐藏;滑动Scrollview/Webview/Recyclerview显 阅读详情

一、为什么需要做这样的动画?

产品提出这样的需求:希望标题栏能够随着scrollView的滑动而进行缩放。

这个动画到底是什么样?现在把gif图传一下。当然,实际上线的页面会比这个好看很多,这只是demo而已,不过动画功能已经全部实现。

二、这个动画的具体实现思路

1、步骤:

(1)找到scrollView的scrollListener方法

(2)在回调的方法里可以得到滑动距离

(3)根据滑动距离,实时改变标题栏的大小。

2、具体实现:

(1)ScrollView没有提供setOnScrollListener方法,因此需要自己写一个借口回调

 

public void setOnScrollListener(OnScrollChangeListener listener) {
        this.changeListener = listener;
    }

    public interface OnScrollChangeListener {
        void onScrollChanged(float dy);
    }
    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        if (changeListener != null) {
            changeListener.onScrollChanged(getScrollY() * 0.65f);
        }
    }

此处需要注意,这里不要在onScrollChanged方法去进行接口回调!!!因为这个方法不是均匀回调的,当滑动很快时,动画就非常快,看上去就是直接挪过去的,用户体验非常差!!!这个问题坑了我好久。

 

(2)回调的方法里可以得到滑动距离

 

        scrollView.setOnScrollListener(new NestedScrollView.OnScrollChangeListener() {
            @Override
            public synchronized void onScrollChanged(final float dy) {

            }

        });

这个dy就是滑动距离

 

(3)根据滑动距离,实时改变标题栏的大小
这部分的思想是:首先拿到初始textView的topMargin,然后用topMargin减去dy,width减去dy就可以了,只不过要对dy进行一下加权。

 

		float newTopMargin = search_layout_max_margin - dy;
                float newWidth = search_layout_max_width - dy;

                newWidth = newWidth < search_layout_min_width ? search_layout_min_width : newWidth;

                if (newTopMargin < search_layout_min_margin) {
                    newTopMargin = search_layout_min_margin;
                }

                if (newWidth < search_layout_min_width) {
                    newWidth = search_layout_min_width;
                }

                params.topMargin = (int) newTopMargin;
                params.width = (int) newWidth;
                tagView.setLayoutParams(params);float newTopMargin = search_layout_max_margin - dy;
                float newWidth = search_layout_max_width - dy;

                newWidth = newWidth < search_layout_min_width ? search_layout_min_width : newWidth;

                if (newTopMargin < search_layout_min_margin) {
                    newTopMargin = search_layout_min_margin;
                }

                if (newWidth < search_layout_min_width) {
                    newWidth = search_layout_min_width;
                }

                params.topMargin = (int) newTopMargin;
                params.width = (int) newWidth;
                tagView.setLayoutParams(params);


以上就是重要代码了,需要demo可以发邮件联系我zhshan@ctrip.com

 

~~~~~~~~~~~~~~~~~~~

附上demo(点击即可下载),欢迎批评指正



 

 

 

 

 

Android TabLayout+ViewPager黄金组合实战指南 TabLayout和ViewPager是Android原生分页导航的核心组件,基于PagerAdapter实现Fragment页面容器与顶部标签栏的双向协同。其原理在于TabLayout负责UI渲染与用户交互,ViewPager承担页面调度与生命周期管理,二者通过setupWithViewPager建立松耦合绑定。该方案具备零第三方依赖、全版本兼容、调试友好等技术价值,广泛应用于电商详情页、教育App模块切换、政务平台多栏目等场景。相比ViewPager2需自行实现Tab逻辑,或BottomNavigati 阅读详情

相关推荐

Android CoordinatorLayout打造酷炫的顶部栏

详情请查看博客: https://blog.youkuaiyun.com/qq_20785431/article/details/95076071

android横向滑动缩放,关于APP内实现界面手动缩放滑动效果

关于APP内页面不能缩放和缩放后不能左右滑动的原因主要有两点:1.我们的混合应用使用的视图控件WebView初始化时禁止了页面缩放的功能,需要我们手动设置WebView,将它页面可缩放的属性值设为true;2.页面中的meta标签中的viewport限制了页面的缩放功能,需要我们在需要缩放的页面手动更改meta标签viewport属性值;首先需要将cordova-plugin-ionic-webv...

weixin_39609887的博客 636

android属性动画(伸展收缩)

android属性动画实现布局的伸展与收缩

android顶部横向滑动导航栏,Android模仿美团顶部的滑动菜单实例代码

前言本文主要给大家介绍了关于Android模仿美团顶部滑动菜单的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。先来看下效果图:实现方法这是通过 ViewPager 和 GridView 相结合做出来的效果,每一个 ViewPager 页面都是一个 GridView,底部的每个滑动指示圆点都是从布局文件中 inflate 出来的首先需要一个代表每个活动主题的 JavaBe...

weixin_28904519的博客 687

Petalinux实战:3种方法调试AXI UART Lite设备(含minicom/screen/直接寄存器操作对比)

本文详细介绍了在Zynq平台上使用Petalinux调试AXI UART Lite设备的三种实用方法:用户空间工具(minicom/screen)、应用层程序(termios配置)和底层寄存器直接操作。文章对比了各方法的优缺点与适用场景,并重点解析了设备树配置、驱动加载等关键环节,帮助开发者快速定位并解决串口通信中的常见问题。

weixin_29190169的博客 432

28377D Bootloader

架构

a6100309120的博客 6012

android横向滑动放大掘金,Android View 的滑动方式

layout方法改变View位置滑动View首先我们看看layout()方法源码@SuppressWarnings({"unchecked"})public void layout(int l, int t, int r, int b) {.......if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOU...

weixin_39927408的博客 425

大规模SoC芯片Hierarchical Flow Calibre LVS教程

大规模SoC芯片Hierarchical Flow Calibre物理验证LVS实现教程

weixin_37584728的博客 1200

如何快速集成PullZoomView:5分钟实现下拉缩放功能

PullZoomView是一个强大的Android自定义组件库,提供了ListView和ScrollView的下拉缩放功能,能帮助开发者轻松实现现代化的界面交互效果。本指南将带你快速掌握PullZoomView的集成方法,只需简单几步即可为你的应用添加惊艳的下拉缩放体验。 ## 什么是PullZoomView? PullZoomView是一个专为Android平台设计的开源组件库,它扩展了原生

gitblog_00850的博客 380

【从零开始学Skynet】实战篇《球球大作战》(一):功能设计

为了能把之前在基础篇中学习到的Skynet的各种知识结合起来,所以在实战篇中,我们准备开发一个完整的游戏案例《球球大作战》,介绍分布式游戏服务端的实现方法。

我是一条寻水的鱼 2978

PX4实战指南:通过遥控器通道映射实现多舵机PWM精准控制

本文详细介绍了通过PX4飞控的AUX PWM接口实现遥控器通道映射控制多舵机的实战指南。内容包括硬件选型与连接、软件参数配置、通道映射方法以及常见问题排查,帮助开发者精准实现无人机舵机PWM控制,适用于云台、机械臂等扩展功能开发。

ee345的博客 304

Android 商城类应用实战之购物车附源码

本文内容较长,阅读大概十分钟本文为实战类项目,所以陈述的逻辑为实现流程 + 核心代码,主要实现的还是购物车的动画与结算,首先我们来看下整体的效果图:...

刘桂林 2958

EPO: Hierarchical LLM Agents with Environment PreferenceOptimization

长期决策和规划任务依然是基于大型语言模型(LLM)的智能体面临的一大挑战(Valmeekam 等,2023;Liu 等,2023;Silver 等,2024)。这些任务需要智能体进行多步骤的规划,同时保持行为的一致性和目标导向,这对于通常被设计用于即时和局部预测的大型语言模型来说颇为困难。此外,针对具身智能体的大型语言模型微调面临的一个关键难题是大规模标注数据的需求(Reed 等,2022)。

qq_52053775的博客 142

10个Android开源个性化View控件

在本文中,小编整理了10个Android开源项目中不错的个性化View控件,相信有你喜欢的。一起来Enjoy吧! 1.SlideAndDragListView 支持ListView的Item的拖动排序、左右滑动事件,可自定义左右滑动显示文字、图标、位移,同时支持onItemClick、onItemLongClick等监听器,提供丰富的回调接口。 项目地址:https://github

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 515

【24届数字IC秋招总结】正式批面试经验汇总6——禾赛

15、ahb写或者读的数据存储起来了嘛,ahb读的话,apb这边是怎样的。19、覆盖率收集的时候有没有哪些是很难收集到的,然后写了定向测试。2、C++有学过嘛 还记得C++的什么内容 C++成绩多少。12、config_db机制用过嘛 四个参数的含义。8、脚本语言有学过嘛 简单学过 简单是指代码数少嘛。13、run_phase和mian_phase的区别。10、覆盖机制的创建方法 ,是不是覆盖用的很少。6、call_back机制记得哪些细节的东西。9、uvm实战学了哪些章节 印象深刻的章节。

qq_42135020的博客 1083

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Unity实现ScrollView并包含吸顶效果

用Unity实现一个滑动的view,子元素可以随意添加,不需要一样。可以上滑吸顶

newchenxf的专栏 2487

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android 开源项目android-open-project解析之(三) ScrollView,TimeView,TipView,FlipView

九、ScrollView Discrollview 支持滚动时Item淡入淡出,平移,缩放效果的ScrollView 项目地址:https://github.com/flavienlaurent/discrollview Demo地址:https://github.com/flavienlaurent/discrollview/raw/master/sample....

weixin_30727835的博客 159

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

弹性+惯性ScrollView,以及超简单的下拉拓展

2.支持多指滑动,到达边缘可以渐进下拉,松开后会有流畅舒服的弹回效果 3.支持快速惯性滚动,到达边缘也会有轻微的弹性效果 4.提供了三个监听回调,扩展性好,已实现下拉的图片缩放效果 DEMO很成熟,很好用

{丸の子} 68

深入解析Android事件分发机制:从原理到滑动冲突实战

在Android应用开发中,UI交互的流畅性直接关系到用户体验,其底层核心是事件分发机制。这一机制基于责任链模式,通过`dispatchTouchEvent`、`onInterceptTouchEvent`和`onTouchEvent`三个核心方法,将用户的触摸事件在View树中层层传递与处理。理解其原理对于实现复杂的自定义控件和优化交互至关重要。在实际工程实践中,嵌套滑动场景下的滑动冲突是常见挑战,开发者需要掌握根据滑动距离与方向判断拦截时机的技巧,或运用更现代的NestedScrolling接口进行协作

weixin_33860553的博客 416

重写ScrollView实现两个ScrollView的同步滚动显示

1.背景介绍   最近项目用到两个ScrollView的同步显示,即拖动左边的ScrollView滚动的同时,实现右边的ScrollView同步滚动。此种情形常用在复杂界面布局中,比如左边的ScrollView显示主要项目,只需上下滚动即可;右边项目是次要项目,可以实现上下或者左右滚动,当上下滚动时,需要左右两边的同步显示。   如图所示,左侧是主项目(日期和股票代码),右...

mmdev 270

android 一个很漂亮的控件ObservableScrollView(含片段代码和源码)

转自:http://www.eoeandroid.com/thread-577241-1-1.html 最近看到最美等应用里面有一个特效,自己上网查了下,写了个demo如下:   在写这个demo之前,查了很多资料,主要是参考github上面的一个例子: https://github.com/ksoichiro/Android-ObservableScr

aoshiwenrou的专栏 5410

竖向视差滑动:react-native-parallax-swiper的vertical模式实战,3步打造全屏Story浏览体验(附iOS限制避坑指南)

react-native-parallax-swiper 是一款 React Native 视差滑动组件库,它的 **vertical 模式(竖向视差滑动)** 只需开启一个属性,就能搭建出类似 Instagram Story 的全屏竖向浏览页:背景随滚动做视差位移、前景内容分层入场、翻页在原生线程跑满 60FPS。下面用 3 步带你上手竖向视差滑动,并附上关键的 iOS 限制避坑指南。 ##

gitblog_00478的博客 810
上一篇: 【Android Fragment相关】DialogFragment怎么玩?
下一篇: 【Android 基础】bundle通信
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值