Android开发中MJRefresh自定义刷新动画效果
作者:wolfhous 发布时间:2023-11-27 06:04:20
标签:mjrefresh,动画,刷新
【一】常见用法
最原始的用法,耦合度低,但是不能统一管理。我们需要在每一个控制器都写以下代码,很繁琐,以后项目修改起来更繁琐,得一个控制器一个控制器的去定位、修改。
1.1 使用默认刷新(耦合度底,但是想统一修改起来特别麻烦)
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//在这里执行刷新操作
}];
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(刷新方法)];
1.2 自定义刷新(耦合度底,但是想统一修改起来特别麻烦)
//1.2.1新建一个自定义刷新
MJRefreshNormalHeader *customRef =[MJRefreshNormalHeader headerWithRefreshingBlock:^{
//1.2.2在这里执行刷新操作
}];
//1.2.3 自定义刷新状态文字
[customRef setTitle:@"普通闲置状态" forState:MJRefreshStateIdle];
[customRef setTitle:@"松开就可以进行刷新的状态" forState:MJRefreshStatePulling];
[customRef setTitle:@"正在刷新中的状态" forState:MJRefreshStateRefreshing];
[customRef setTitle:@"即将刷新的状态" forState:MJRefreshStateWillRefresh];
[customRef setTitle:@"所有数据加载完毕,没有更多的数据了" forState:MJRefreshStateNoMoreData];
//1.2.4添加下拉刷新
self.tableView.mj_header = customRef;
//一些其他属性设置
/*
// 设置字体
customRef.stateLabel.font = [UIFont systemFontOfSize:15];
customRef.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// 设置颜色
customRef.stateLabel.textColor = [UIColor redColor];
customRef.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
// 隐藏时间
customRef.lastUpdatedTimeLabel.hidden = YES;
// 隐藏状态
customRef.stateLabel.hidden = YES;
// 设置自动切换透明度(在导航栏下面自动隐藏)
customRef.automaticallyChangeAlpha = YES;
*/
【二】正确用法(统一管理项目所有下拉刷新控件)
一共有6种刷新对象(图片末尾带红色的都是)。
假如我们想实现默认的下拉刷新,
【2.1】只要新建一个对象,
继承自MJRefreshNormalHeader,
#import "MJRefreshNormalHeader.h"
@interface HSNormalHeader : MJRefreshNormalHeader
@end
【2.2】然后重写方法- (void)prepare,重写后记得实现[super prepare],
#import "HSNormalHeader.h"
@implementation HSNormalHeader
#pragma mark - 重写父类的方法
- (void)prepare{
[super prepare];
//所有的自定义东西都放在这里
[self setTitle:@"普通闲置状态" forState:MJRefreshStateIdle];
[self setTitle:@"松开就可以进行刷新的状态" forState:MJRefreshStatePulling];
[self setTitle:@"正在刷新中的状态" forState:MJRefreshStateRefreshing];
[self setTitle:@"即将刷新的状态" forState:MJRefreshStateWillRefresh];
[self setTitle:@"所有数据加载完毕,没有更多的数据了" forState:MJRefreshStateNoMoreData];
//一些其他属性设置
/*
// 设置字体
self.stateLabel.font = [UIFont systemFontOfSize:15];
self.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// 设置颜色
self.stateLabel.textColor = [UIColor redColor];
self.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
// 隐藏时间
self.lastUpdatedTimeLabel.hidden = YES;
// 隐藏状态
self.stateLabel.hidden = YES;
// 设置自动切换透明度(在导航栏下面自动隐藏)
self.automaticallyChangeAlpha = YES;
*/
}
//如果需要自己重新布局子控件
- (void)placeSubviews{
[super placeSubviews];
//如果需要自己重新布局子控件,请在这里设置
//箭头
// self.arrowView.center =
}
@end
然后我们再对应的控制器实现刷新只要这样既可:
【2.3】引入自定义对象,比如叫HSNormalHeader(继承自MJRefreshNormalHeader),
#import "HSNormalHeader.h"
【2.4】在需要下拉刷新的控制器这样实现既可
self.tableView.mj_header = [HSNormalHeader headerWithRefreshingBlock:^{
//刷新请求
}];
同理,对应的下拉动画只需新建对象继承自MJRefreshGifHeader
#pragma mark - 重写父类的方法
- (void)prepare{
[super prepare];
// 设置普通状态的动画图片
NSMutableArray *idleImages = [NSMutableArray array];
for (NSUInteger i = 1; i<=60; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];
[idleImages addObject:image];
}
[self setImages:idleImages forState:MJRefreshStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
NSMutableArray *refreshingImages = [NSMutableArray array];
for (NSUInteger i = 1; i<=3; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%zd", i]];
[refreshingImages addObject:image];
}
[self setImages:refreshingImages forState:MJRefreshStatePulling];
// 设置正在刷新状态的动画图片
[self setImages:refreshingImages forState:MJRefreshStateRefreshing];
//隐藏时间
self.lastUpdatedTimeLabel.hidden = YES;
//隐藏状态
self.stateLabel.hidden = YES;
}
至此,可以说MJRefresh的常用主要功能都已经被你掌握完毕,如需掌握更多请去参考MJ的地址
https://github.com/CoderMJLee/MJRefresh
本案例的demo地址为https://github.com/wolfhous/HSUpdateApp
注:里面还包含一个的自动检测更新,大家觉得好用请加星哦!
以上所述是小编给大家介绍的Android开发中MJRefresh自定义刷新动画效果网站的支持!
来源:http://www.cnblogs.com/wolfhous/archive/2016/11/17/6072626.html


猜你喜欢
- 由于老师说如果拿MATLAB制作出游戏或者有趣的动画的话。。平时成绩可以拿满分于是。。开始尝试制作各种matlab小游戏最初通过Alex的贪
- 简介网上对于 Camera2 的介绍有很多,在 Github 上也有很多关于 Camera2 的封装库,但是对于那些库,封装性太强,有时候我
- java实现数据加密问题,具体代码如下所示:package Array;import java.util.Scanner;/*某个公司采用电
- 背景在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条。但同时对查询速度的要求也比较高。这个数据库之前在没有使用P
- 加锁和解锁我们来看下ReentrantLock的基本用法ThreadDomain35类public class ThreadDomain35
- 一、在drawable下面添加xml文件rounded_editview.xml<?xml version="1.0&quo
- import java.io.BufferedReader; import java.io.IOException;  
- 通过微软的SAPI,不仅仅可以实现语音合成TTS,同样可以实现语音识别SR。下面我们就介绍并贴出相关代码。主要有两种方式:1、使用COM组件
- 一,哈希表(Hashtable)简述在.NET Framework中,Hashtable是System.Collections命名空间提供的
- 本文实例讲述了C#实现将应用程序设置为开机启动的方法。分享给大家供大家参考。具体如下:private void WriteRegistry(
- Android可以在所有应用上方添加View,就是给WindowManager添加一个View,在创建的View的时候可以给这个View设置
- 前言在Flutter实际开发中,大家可能会遇到flutter框架中提供的widget达不到我们想要的效果,这时就需要我们去自定义widget
- 一、通过配置文件控制静态资源的热部署在配置文件 application.properties 中添加:#表示从这个默认不触发重启的目录中除去
- 首先我们应该知道线程安全问题一般发生在成员变量上,这是为什么啦?因为成员变量是存放在堆内存中,而堆内存又是线程共享的,这就造成了线程安全问题
- 本文实例为大家分享了C#实现学生成绩管理系统的具体代码,供大家参考,具体内容如下使用链表写学生成绩管理系统链表可以灵活的展示增删改查下面是结
- 实现控件拖动的基本原理是对鼠标位置的捕获,同时根据鼠标按键的按下、释放确定控件移动的幅度和时机。 简单示例: 在Grid中有一个Button
- Java BigDecimal的坑采坑处 BigDecimal bd =new BigDecimal(0.1);
- 使用 replace 函数动态填充字符串String str="Hello {0},我是 {1},今年{2}岁"
- 在做Android支付的时候肯定会用到支付宝支付, 根据官方给出的demo做起来非常费劲,所以我们需要一次简单的封装。 封装的代码也很简单,
- 引言第一眼看到这个题目,我相信大家都会脑子里面弹出来一个想法:这不都是 Spring 的注解么,加了这两个注解的类都会被最终封装成 Bean