PullToRefresh修改上拉下拉加载动画

2024-09-01 11:32

本文主要是介绍PullToRefresh修改上拉下拉加载动画,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

修改PullTuRefreshListView源码:
实现 动画加载:

第一步:

源码分析:

PullToRefrehListView 默认加载动画是很难看的:
这里写图片描述

默认是很难看的 但我们想要实现我们的效果怎么办?

分析源码:

找到PullRefreshListView 分析:

我们知道 上拉和下拉加载 动画无非是 pullToRefreshListView 中添加了头和脚, 而头和脚都是动画!!

PullToRefreshListView.java 两个动画类变量:

//定义  头部和尾部的加载动画private LoadingLayout mHeaderLoadingView;private LoadingLayout mFooterLoadingView;...//加载布局@Overrideprotected LoadingLayoutProxy createLoadingLayoutProxy(final boolean includeStart, final boolean includeEnd) {LoadingLayoutProxy proxy = super.createLoadingLayoutProxy(includeStart, includeEnd);if (mListViewExtrasEnabled) {final Mode mode = getMode();if (includeStart && mode.showHeaderLoadingLayout()) {//添加  头部动画 到listView中proxy.addLayout(mHeaderLoadingView);}if (includeEnd && mode.showFooterLoadingLayout()) {//添加  添加脚部动画  到listView中proxy.addLayout(mFooterLoadingView);}}return proxy;}
...

createLoadingLayoutProxy方法继承自抽象类PullToRefreshAdapterViewBase查看方法没有该方法继续父类查找,查找PullToRefreshAdapterViewBase父类PullToRefreshBase:


// We need to create now layouts nowmHeaderLayout = createLoadingLayout(context, Mode.PULL_FROM_START, a);mFooterLayout = createLoadingLayout(context, Mode.PULL_FROM_END, a);...//加载动画    布局----------protected LoadingLayout createLoadingLayout(Context context, Mode mode, TypedArray attrs) {LoadingLayout layout = mLoadingAnimationStyle.createLoadingLayout(context, mode,getPullToRefreshScrollDirection(), attrs);layout.setVisibility(View.INVISIBLE);return layout;}...//此处实现了我们需要  修改的动画方法:
//修改代码实现  自己的下载刷新动画LoadingLayout createLoadingLayout(Context context, Mode mode, Orientation scrollDirection, TypedArray attrs) {switch (this) {case ROTATE://旋转动画default://帧动画   frameAnimationLayout为     自定义动画类return new FrameAnimationLayout(context, mode, scrollDirection, attrs);//旋转动画   默认的动画
//                  return new RotateLoadingLayout(context, mode, scrollDirection, attrs);case FLIP:return new FlipLoadingLayout(context, mode, scrollDirection, attrs);}}

//自定义动画类 实现动画

package com.handmark.pulltorefresh.library.internal;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.R;/*** Package_name:com.handmark.pulltorefresh.library.internal* Author:zhaoQiang* Email:zhao_hero@163.com* Date:2016/11/28  19:34** 帧动画  实现加载自定义的动画   实现的是帧动画*/
public class FrameAnimationLayout extends LoadingLayout{
//继承自 PullToRefreshListView提供的loadingLayout类private AnimationDrawable mAnimationDrawable;public FrameAnimationLayout(Context context, PullToRefreshBase.Mode mode,PullToRefreshBase.Orientation scrollDirection, TypedArray attrs) {super(context, mode, scrollDirection, attrs);mHeaderImage.setImageResource(R.drawable.ptr_animation);mAnimationDrawable = (AnimationDrawable) mHeaderImage.getDrawable();}@Overrideprotected int getDefaultDrawableResId() {//返回   自定义动画布局return R.drawable.ptr_animation;}@Overrideprotected void onLoadingDrawableSet(Drawable imageDrawable) {}@Overrideprotected void onPullImpl(float scaleOfLayout) {}@Overrideprotected void pullToRefreshImpl() {}//刷新的时候@Overrideprotected void refreshingImpl() {mAnimationDrawable.start();//开启动画}@Overrideprotected void releaseToRefreshImpl() {}@Overrideprotected void resetImpl() {}
}

anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"   ><item android:drawable="@drawable/ptr_img_0" android:duration="10"></item><item android:drawable="@drawable/ptr_img_1" android:duration="10"></item><item android:drawable="@drawable/ptr_img_2" android:duration="10"></item><item android:drawable="@drawable/ptr_img_3" android:duration="10"></item><item android:drawable="@drawable/ptr_img_4" android:duration="10"></item><item android:drawable="@drawable/ptr_img_5" android:duration="10"></item><item android:drawable="@drawable/ptr_img_6" android:duration="10"></item><item android:drawable="@drawable/ptr_img_7" android:duration="10"></item><item android:drawable="@drawable/ptr_img_8" android:duration="10"></item><item android:drawable="@drawable/ptr_img_9" android:duration="10"></item><item android:drawable="@drawable/ptr_img_10" android:duration="10"></item><item android:drawable="@drawable/ptr_img_11" android:duration="10"></item><item android:drawable="@drawable/ptr_img_12" android:duration="10"></item><item android:drawable="@drawable/ptr_img_13" android:duration="10"></item><item android:drawable="@drawable/ptr_img_14" android:duration="10"></item><item android:drawable="@drawable/ptr_img_15" android:duration="10"></item><item android:drawable="@drawable/ptr_img_16" android:duration="10"></item><item android:drawable="@drawable/ptr_img_17" android:duration="10"></item></animation-list>

这就完成了自定义下拉和上拉动画,修改部分源码以及自定义帧动画类,效果图:这里写图片描述

源码:
https://github.com/zqHero/PullToRefreshDemo

参考博客:

http://blog.csdn.net/plmmmmlq/article/details/50068717

这篇关于PullToRefresh修改上拉下拉加载动画的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL底层文件的查看和修改方法

《MySQL底层文件的查看和修改方法》MySQL底层文件分为文本类(可安全查看/修改)和二进制类(禁止手动操作),以下按「查看方法、修改方法、风险管控三部分详细说明,所有操作均以Linux环境为例,需... 目录引言一、mysql 底层文件的查看方法1. 先定位核心文件路径(基础前提)2. 文本类文件(可直

kingbase修改权限实现方式

《kingbase修改权限实现方式》该文章详细介绍了如何在数据库中创建用户并赋予其相应的权限,包括创建用户、回收默认权限、创建数据库、赋权数据库权限、创建只读用户以及回收权限等步骤... 目录前言使用步骤总结前言创建用户后对数据库对象的读写权限进行修改使用步骤1、创建用户create user cs

springboot+mybatis一对多查询+懒加载实例

《springboot+mybatis一对多查询+懒加载实例》文章介绍了如何在SpringBoot和MyBatis中实现一对多查询的懒加载,通过配置MyBatis的`fetchType`属性,可以全局... 目录springboot+myBATis一对多查询+懒加载parent相关代码child 相关代码懒

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)

《Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)》在职场中,Word文档是公认的好伙伴,但你有没有被它折磨过?批量生成合同、制作报告以及发放证书/通知等等,这些重复、低效... 目录重复性文档制作,手动填充模板,效率低下还易错1.python-docx入门:Word文档的“瑞士

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

SpringBoot加载profile全面解析

《SpringBoot加载profile全面解析》SpringBoot的Profile机制通过多配置文件和注解实现环境隔离,支持开发、测试、生产等不同环境的灵活配置切换,无需修改代码,关键点包括配置文... 目录题目详细答案什么是 Profile配置 Profile使用application-{profil

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.