Android开发中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自定义刷新动画效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-08-22 09:45:27

Android开发中MJRefresh自定义刷新动画效果的相关文章

Android开发中MJRefresh自定义刷新动画效果_Android

[一]常见用法 最原始的用法,耦合度低,但是不能统一管理.我们需要在每一个控制器都写以下代码,很繁琐,以后项目修改起来更繁琐,得一个控制器一个控制器的去定位.修改. 1.1 使用默认刷新(耦合度底,但是想统一修改起来特别麻烦) self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ //在这里执行刷新操作 }]; self.tableView.mj_header = [MJRefreshNorm

android开发中如何自定义UI模板【图解教程】

每个设计良好的App都是自定义标题栏,在自定义标题栏的过程中大部分人可能都是自定义一个标题的xml文件,然后在需要的地方直接通过include来引用,这比起在每个布局文件中写标题栏已经进化很多了,但仍然不是最简单有效的方法,我们为什么不能自定义一个标题控件呢?今天就带大家自己做一个标题栏控件.效果图如下: <?xml version="1.0" encoding="utf-8"?> <resources>     <declare-st

Android开发中ListView自定义adapter的封装_Android

[引入]  我们一般编写listView的时候顺序是这样的:  •需要展示的数据集List<T>  •为这个数据集编写一个ListView  •为这个ListView编写一个Adapter,一般继承自BaseAdapter  •在BaseAdapter内部编写一个ViewHolder类,对应ListView里面的item控件,提高控件的查询效率  分析: List<T>:ListView --> Adapter extends BaseAdapter --> ViewH

Android开发中ListView自定义adapter的封装

[引入] 我们一般编写listView的时候顺序是这样的:  •需要展示的数据集List<T>  •为这个数据集编写一个ListView  •为这个ListView编写一个Adapter,一般继承自BaseAdapter  •在BaseAdapter内部编写一个ViewHolder类,对应ListView里面的item控件,提高控件的查询效率 分析: List<T>:ListView --> Adapter extends BaseAdapter --> ViewHol

在Android开发中使用自定义组合控件的例子_Android

一.定义一个XML布局文件setting_item_view.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=

在Android开发中使用自定义组合控件的例子

一.定义一个XML布局文件 setting_item_view.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height

ppt如何制作自定义路径动画效果

  在ppt中制作自定义路径动画效果的方法: 首先,打开Microsoft PowerPoint,添加一张空白的PPT. 在页面的外面画一个小球(想像它是一个弹力球吧!) 选中小球,点击"动画"--"添加动画"--"自定义路径" "自定义路径"的绘制,和绘图的铅笔,PS的笔刷等工具是一样的,拖动数遍便能绘制了. 绘制完路径之后,点击"效果选项"右下角有一个小箭头,点击之后进入自定义路径的设置中,在这里设置动

Android仿支付宝中余额宝的数字动画效果_Android

实现效果图: 下面是具体代码,可直接复制: package com.lcw.rabbit.widget; import android.animation.ObjectAnimator; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import android.view.animation.AccelerateDecelerateInterpola

Android开发中ViewPager实现多页面切换效果_Android

ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入"Android-support-v4.jar" 首先必须知道:要使用ViewPager,必须要使用PagerAdapter为其提供数据,也就必须实现下面四个方法: 1, getCount():ViewPager需要显示的页面个数 2,isViewFromObject(View view, Object object):view 是某个位置的页面,Object是