自定义控件:ListView视差动画

2024-01-28 21:08

本文主要是介绍自定义控件:ListView视差动画,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图

这里写图片描述

思路

在下拉过程中,不断扩大图片的height。下拉过程中图片的高度=原始ImageView的高度+下拉距离,当然也可以是下拉距离/2,这样下拉2个单位,图片的高度才增加1个单位。所以需要先要获取头布局中的ImageView,获取原高度。
当手指挪开的时候,需要让图片的高度复原,这个采用的是属性动画,在动画执行的过程中,获取value,并重新设置图片的高度。

Step1:先实现下拉过程中改变图片高度

overScrollBy():当headerView滑到顶部或者footerView滑到底部的视乎调用,参数说明

参数说明
deltaXx轴瞬时滑动距离(偏移量)
deltaYy轴瞬时滑动距离
scrollXx轴的滑动距离
scrollXy轴的滑动距离
scrollRangeXx轴滑动区间
scrollRangeYy轴滑动区间
maxOverScrollXx轴超过距离的最大值
maxOverScrollYy轴超过距离的最大值
isTouchEvent手指是否触摸

这些参数:
往下滑动:value<0
往上滑动:value>0

@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {if (deltaY < 0 && isTouchEvent) {int topHeight = ivHeader.getHeight() - deltaY / 2;setHeaderHeight(topHeight);}return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}
public void setHeaderImageView(ImageView ivHeader) {this.ivHeader = ivHeader;originHeaderHeight = ivHeader.getHeight();
}private void setHeaderHeight(int newHeight) {ivHeader.getLayoutParams().height = newHeight;ivHeader.requestLayout();
}

注意:必须是ListView渲染后才可以吧headerImageView传递过去,这样获取的才是正确的高度。

ivHeader.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {listView.setHeaderImageView(ivHeader);ivHeader.getViewTreeObserver().removeOnGlobalLayoutListener(this);}
});

Step2:还原高度

手指已开后 在属性动画中获取值,改变headerImageView的高度

@Override
public boolean onTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_UP) {int currentHeight = ivHeader.getHeight();ValueAnimator valueAnimator = ValueAnimator.ofInt(currentHeight, originHeaderHeight);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {int height = (int) animation.getAnimatedValue();setHeaderHeight(height);}});valueAnimator.setInterpolator(new OvershootInterpolator());valueAnimator.setDuration(currentHeight - originHeaderHeight);valueAnimator.start();}return super.onTouchEvent(ev);
}

demo:https://gitee.com/customView/PuarallaxListView01.git

这篇关于自定义控件:ListView视差动画的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654770

相关文章

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自