android 快速实现 recyclerview 的所有item 都执行动画

1.在adapter 里面重写onViewAttachedToWindow 和 onViewDetachedFromWindow 两个方法

package com.example.widget;import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;public class GridAdapter extends RecyclerView.Adapter {private boolean mIsRunAnim;//是否执行动画@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {return null;}@Overridepublic int getItemCount() {return 0;}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mIsRunAnim) {//点击item停止抖动动画mIsRunAnim = false;notifyDataSetChanged();} else {ToastUtil.showToast(mList.get(holder.getBindingAdapterPosition()).getName());}}});holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {if (!mIsRunAnim) {//执行动画Logs.i(TAG, "itemView-onLongClick");mIsRunAnim = true;notifyDataSetChanged();//刷新适配器return true;}return false;}});}//view依附窗口上时@Overridepublic void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {if (mIsRunAnim){//仿桌面删除app 的抖动动画RotateAnimation animation = new RotateAnimation(-2, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);animation.setDuration(100);animation.setRepeatMode(Animation.REVERSE);animation.setRepeatCount(Animation.INFINITE);animation.setInterpolator(new LinearInterpolator());holder.itemView.startAnimation(animation);//itemView执行动画//holder.ivIcon.startAnimation(animation);//执行子view动画}super.onViewAttachedToWindow(holder);}//view被移除时@Overridepublic void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) {if (holder.itemView.getAnimation() != null) {holder.itemView.clearAnimation();//清除动画}super.onViewDetachedFromWindow(holder);}
}

2.拓展:长按拖动换位

        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {@Overridepublic boolean isLongPressDragEnabled() {//是否可以拖动return gridAdapter.isRunAnim();}@Overridepublic int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {Logs.i(TAG,"getMovementFlags");// 上下左右都可以拖拽int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;return makeMovementFlags(dragFlags, 0);}@Overridepublic boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {// 获取当前item和目标item的位置int fromPosition = viewHolder.getBindingAdapterPosition();int toPosition = target.getBindingAdapterPosition();Logs.i(TAG,"onMove=fromPos="+fromPosition+",toPos="+toPosition);// 交换数据集中的位置Collections.swap(list, fromPosition, toPosition);// 通知适配器数据交换gridAppListAdapter.notifyItemMoved(fromPosition, toPosition);return true;}@Overridepublic void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {}});itemTouchHelper.attachToRecyclerView(reclclerView);reclclerView.setLayoutManager(gridLayoutManager);reclclerView.setAdapter(gridAdapter);

仿桌面删除app Demo:https://download.csdn.net/download/qq_29364417/88934293?spm=1001.2014.3001.5501 

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

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

相关文章

L3自动驾驶的“双保险”:冗余EPS关键技术解析

摘要: 本文主要介绍冗余EPS的发展路径和关键技术。 引言 在乘用车领域,电动助力转向系统(Electric Power Steering,EPS)相比传统的液压助力转向系统(Hydraulic Power Steering,HPS)具有结构简单、响应迅速、能耗低等优点,因此应用很广。随着智能驾驶的发展,作为底层…

springboot261高校专业实习管理系统的设计和开发

基于spring boot的高校专业实习管理系统的设计与实现 摘 要 随着国内市场经济这几十年来的蓬勃发展,突然遇到了从国外传入国内的互联网技术,互联网产业从开始的群众不信任,到现在的离不开,中间经历了很多挫折。本次开发的高校专…

制造行业大数据应用:四大领域驱动产业升级与智慧发展

一、大数据应用:制造行业的智慧引擎 随着大数据技术的不断突破与普及,制造行业正迎来一场前所未有的变革。大数据应用,如同智慧引擎一般,为制造行业注入了新的活力,推动了产业升级与创新发展。 二、大数据应用在制造行…

外贸人要加油努力,到底怎么做

我们说要加油,要努力,那做外贸我们的力气到底应该往哪里使?想要把外贸做好容易吗? 其实没有一件事情背后他是真正容易的,如果发现自己迷茫了,很有可能是你既要又要,没有自己的一个满足感&#…

鸿蒙ArkTS语言快速入门-TS(二)

相关文章快速入口:鸿蒙ArkTS语言快速入门-TS(三) ArkTS入门第二篇 TS入门学习变量声明条件语句if语句switch…case 语句 接口普通函数接口函数类型接口类类型接口继承接口接口继承类 TS入门学习 变量声明 使用let和const声明,替…

Elasticsearch:机器学习与人工智能 - 理解差异

作者:来自 Elastic Aditya Tripathi, Jessica Taylor 长期以来,人工智能几乎完全是科幻小说作家的玩物,人类将技术推得太远,以至于它变得活跃起来 —— 正如好莱坞让我们相信的那样 —— 开始造成严重破坏。 令人愉快的东西&#…

C++中的RAII原则和资源管理如何提高程序效率和安全性?

文章目录 C中的RAII(Resource Acquisition Is Initialization)原则是一种编程范式,它确保资源在其生命周期内的有效管理。RAII的核心思想是在对象创建时(初始化阶段)获取资源,并在对象销毁时(析…

springboot项目集成nacos做配置中心后没生效问题

问题描述&#xff1a; springboot项目中集成nacos做配置中心&#xff0c;添加了nacos依赖和bootstrap.yaml后&#xff0c;项目启动时nacos并没有生效&#xff08;打印日志中都没有nacos相关信息&#xff09;。 <dependency><groupId>com.alibaba.cloud</groupI…

论企业安全漏洞扫描的重要性

前言 随着信息技术的迅猛发展和互联网的广泛普及&#xff0c;网络安全问题日益凸显。在这个数字化的世界里&#xff0c;无论是企业还是个人&#xff0c;都面临着前所未有的安全威胁。安全漏洞&#xff0c;作为这些威胁的源头&#xff0c;常常被忽视或无法及时发现。 而安全漏洞…

Codeforces-927(div3)-C. LR-remainders

这题很经典啊,对于除怎么解决取模的问题. 这种题确实是非常经典,就是这个取模怎么解决有除的问题呢?? 一开始,出于某种奇怪的心态(不就是日常装杯吗....),压根没考虑到.以此警醒自己,认真对待,仔细审题,仔细理解. 回归正文: 处理有除法的取模,可用线段树,就是凑区间吗,能…

ansible-playbook的角色(role)

1前言 角色目录如下&#xff08;分别为httpd角色和nginx角色&#xff09; handlers/ &#xff1a;至少应该包含一个名为 main.yml 的文件&#xff1b; 其它的文件需要在此文件中通过include 进行包含 vars/ &#xff1a;定义变量&#xff0c;至少应该包含一个名为 main.yml 的…

Leetcode 572 另一棵树的子树

文章目录 1. 题目描述2. 我的尝试3. 其他题解 1. 题目描述 Leetcode 572 另一棵树的子树 2. 我的尝试 以中序顺序从大树的根节点开始遍历&#xff0c;每次比较以当前节点为根节点的子树是否与小树相同。若某次比较结果为true&#xff0c;说明小树是大树的子树。 比较两树是…

JDK环境变量配置-jre\bin、rt.jar、dt.jar、tools.jar

我们主要看下rt.jar、dt.jar、tools.jar的作用&#xff0c;rt.jar在​%JAVA_HOME%\jre\lib&#xff0c;dt.jar和tools.jar在%JAVA_HOME%\lib下。 rt.jar&#xff1a;Java基础类库&#xff0c;也就是Java doc里面看到的所有的类的class文件。 tools.jar&#xff1a;是系统用来编…

在ubuntu上安装FastSufer【本机安装】

亲测:FastSurfer分割并重建一个大脑需要1个小时,而freeSurfer需要8个小时。确实很快! 这里我在网页端搭建了一个小的工具包,里面集成了经典的freeSurfer和较快的FastSurfer。如果你不想安装或者手头没有linux设备,您也可以直接从以下网址直接使用,跳过繁琐的安装步骤!!…

嵌入式面经-ARM体系架构-寄存器与异常处理

ARM寄存器组织 寄存器概念 寄存器是处理器内部的存储器&#xff0c;没有地址 寄存器作用 一般用于暂时存放参与运算的数据和运算结果 在某个特定模式下只能使用当前模式下的寄存器&#xff0c;一个模式下特有的寄存器别的模式下不能使用 一共是40个寄存器 寄存器分类 通用寄…

Vue3.0里为什么要用 Proxy API 替代 defineProperty API

一、Object.defineProperty 定义&#xff1a;Object.defineProperty() 方法会直接在一个对象上定义一个新属性&#xff0c;或者修改一个对象的现有属性&#xff0c;并返回此对象 为什么能实现响应式 通过defineProperty 两个属性&#xff0c;get及set get 属性的 getter 函…

Br 算法

基于google的brotli开源&#xff0c;实现Br算法。 #include <brotli/encode.h> #include <brotli/decode.h>namespace br {/*compress unsigned char* content,if ok return non empty unsigned char * */std::string compress_string(const std::string& c…

【Web】浅聊Hessian反序列化之打Rome出网不出网

目录 前言 出网——JdbcRowSetImpl 不出网——SignedObject 打二次反序列化 前文&#xff1a;【Web】浅聊Java反序列化之玩转Hessian反序列化的前置知识 前言 正如我们前文所说&#xff0c;当Hessian反序列化Map类型的对象的时候&#xff0c;会自动调用其put方法&#xff…

pytorch的梯度图与autograd.grad和二阶求导

前向与反向 这里我们从 一次计算 开始比如 zf(x,y) 讨论若我们把任意对于tensor的计算都看为函数&#xff08;如将 a*b&#xff08;数值&#xff09; 看为 mul(a,b)&#xff09;&#xff0c;那么都可以将其看为2个过程&#xff1a;forward-前向&#xff0c;backward-反向在pyto…

常有的正则表达式

在项目开始实践中&#xff0c;我们经常遇到一些校验手机号、座机号、小数位、特殊字符之类的正则表达式&#xff0c;这里根据开发经验罗列了一下常见的正则表达式。原文详见《常用正则表达式》 正则表达式 校验数字 验证0-7.1&#xff08;不包含0和7.1&#xff09; 验证0-7…