支持gif图片的Load反馈框架,只需一张gif图,一行代码解决初次加载,重试加载,刷新加载,与生命周期绑定,LeakCanary检测无内存泄漏
Clone or download
Latest commit 0efc771 May 17, 2018
Permalink
Failed to load latest commit information.
.idea finish May 17, 2018
app finish May 17, 2018
gradle/wrapper 优化 Dec 4, 2017
imgs finish Dec 20, 2017
loadretrylibrary 新增淡入淡出动画时间配置 Jan 11, 2018
.gitignore 优化 Dec 4, 2017
LICENSE.txt 协议 Jan 6, 2018
README.md Update README.md Jan 11, 2018
build.gradle test Dec 5, 2017
gradle.properties 优化 Dec 4, 2017
gradlew 优化 Dec 4, 2017
gradlew.bat 优化 Dec 4, 2017
settings.gradle test Dec 5, 2017

README.md

Gif-Load-ReTry-Refresh

Gif-Load-ReTry-Refresh:只需要一张Gif图,一行代码支持初次加载,重试加载,加载后再次刷新

  • 原理 :遍历View树,在Framelayout中动态插入和移除加载布局,与生命周期绑定,避免内存泄漏;
  • 功能 :目前支持在Activity,Fragment中使用(支持任何方式实现的沉浸式状态栏和透明状态栏);
  • 封装 :接口化调用,支持MVP结构中使用(View层implement LoadRetryRefreshListener接口,然后直接在Activity/Fragment传入this即可)。

示例

Activity中加载成功 Activity中加载失败
在Activity中加载成功,然后再次加载刷新 在Activity中加载失败,然后重试加载,加载成功后刷新加载
activity_success activity_failed

Fragment中加载成功 Fragment中加载失败
在Fragment中加载成功,然后再次加载刷新 在Fragment中加载失败,然后重试加载,加载成功后刷新加载
fragment_success fragment_failed

使用   

初步配置

引入

Step 1. Add it in your root build.gradle at the end of repositories:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Step 2. Add the dependency

dependencies {
        compile 'com.github.NoEndToLF:Gif-Load-ReTry-Refresh:1.1.3'
}

配置属性

方法 参数 作用
setGif R.drawable.* 加载页面的Gif图
setBackgroundColor R.color.* 加载页面整体背景颜色
setBtnNormalColor R.color.* 加载页面按钮未按下时的颜色
setBtnPressedColor R.color.* 加载页面按钮按下时的颜色
setBtnBorderColor R.color.* 加载页面按钮边框的颜色
setBtnTextColor R.color.* 加载页面按钮文字的颜色
setBtnRadius Float 加载页面按钮的圆角弧度
setBtnText String 加载页面按钮的显示文字
setLoadText   String 正在加载中的提示文字
setLoadAndErrorTextColor   R.color.* 加载页面的提示文字和加载失败提示文字的颜色
setStartAnimTime   int 加载页面的显示的淡入动画时间
setEndAnimTime   int 加载页面的消失的淡出动画时间

示例代码,建议在 Application的 onCreate中进行初始化

LoadRetryRefreshConfig config=new LoadRetryRefreshConfig();
        config.setBackgroundColor(R.color.white);
        config.setBtnNormalColor(R.color.blue_normal);
        config.setBtnPressedColor(R.color.blue_press);
        config.setBtnBorderColor(R.color.oringe_normal);
        config.setBtnRadius(10f);
        config.setBtnText("点击重新加载");
        config.setLoadText("测试加载2秒钟...");
        config.setBtnTextColor(R.color.white);
        config.setLoadAndErrorTextColor(R.color.gray);
        config.setGif(R.drawable.test);
	config.setStartAnimTime(100);
        config.setEndAnimTime(500);
        LoadReTryRefreshManager.getInstance().setLoadRetryRefreshConfig(config);

在 Activit中使用

布局中,请在 Toolbar下的需要加载的内容最外层套一层 FrameLayout(为何需要这样做),如:

<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <android.support.v7.widget.Toolbar
        app:contentInsetStart="0dp"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center_vertical"
        android:id="@+id/toolbar"
        android:background="@color/color_toolbar"
        >
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            
            **********************************
            **********************************
            你的内容布局,如Linearlayout**********************************
            **********************************
            
             </FrameLayout>
</LinearLayout>

代码中

方法简介

方法 参数 作用
register Activity,LoadRetryRefreshListener 注册
startLoad Activity 开始加载
unRegister Activity 解除绑定
onLoadSuccess Activity,ShowRefreshViewListener 关闭加载View和刷新时的Dialog、下拉刷新等
onLoadFailed   Activity,String,ShowRefreshViewListener 显示加载失败原因,关闭加载View和刷新时的Dialog、下拉刷新等

1、注册,一般在 onCreate中调用

LoadReTryRefreshManager.getInstance().register(this, new LoadRetryRefreshListener() {
            @Override
            public void loadAndRetry() {
            //执行你的网络请求
            //dosomething();
            }

            @Override
            public void showRefreshView() {
            //显示你刷新时的加载View,如Dialog,下拉刷新等
                
            }
        });           

2、开始加载,无需判断是初次加载还是刷新,已自动进行判断,只需要在想要加载或刷新的地方直接调用(加载失败重试加载已封装到 Button事件中)

LoadReTryRefreshManager.getInstance().startLoad(this);          

3、加载结果回调,在你的请求成功和失败的回调中加入加载结果回调

            @Override
            public void onSuccess(Integer value) {
            //加载成功你要做的事.....
            
                //加载结果回调
                LoadReTryRefreshManager.getInstance().onLoadSuccess(FailedActivity.this, 
                new ShowRefreshViewListener() {
                    @Override
                    public void colseRefreshView() {
                     //关闭你的刷新View,如Dialog,下拉刷新等  
                    }
                });
            }

            @Override
            public void onFailed(Throwable e) {
            //加载失败你要做的事.....
            
                //加载结果回调
                LoadReTryRefreshManager.getInstance().onLoadFailed(FailedActivity.this, 
                e.getMessage(), new ShowRefreshViewListener() {
                    @Override
                    public void colseRefreshView() {
                       //关闭你的刷新View,如Dialog,下拉刷新等
                    }
                });
            }        

4、解除绑定,可以直接写在 BaseActivity的 onDestory方法中,会自动判断然后进行解绑

Override
    protected void onDestroy() {
        super.onDestroy();
        LoadReTryRefreshManager.getInstance().unRegister(this);
    }

在 Fragment中使用

布局中,同 Activity中使用一致,请在 Toolbar下的需要加载的内容最外层套一层 FrameLayout(为何需要这样做

代码中

方法简介

方法 参数 作用
register Fragment,View,LoadRetryRefreshListener 注册
(View为Fragment在onCreateView中返回的View)
startLoad Fragment 开始加载
unRegister Fragment 解除绑定
onLoadSuccess Fragment,ShowRefreshViewListener 关闭加载View和刷新时的Dialog、下拉刷新等
onLoadFailed Fragment,String,ShowRefreshViewListener 显示加载失败原因,关闭加载View和刷新时的Dialog、下拉刷新等

1、注册,一般在 onCreateView中调用

LoadReTryRefreshManager.getInstance().register(this, contentView,new LoadRetryRefreshListener() {
            @Override
            public void loadAndRetry() {
            //执行你的网络请求
            //dosomething();
            }

            @Override
            public void showRefreshView() {
            //显示你刷新时的加载View,如Dialog,下拉刷新等
                
            }
        });           

2、开始加载,无需判断是初次加载还是刷新,已自动进行判断,只需要在想要加载或刷新的地方直接调用(加载失败重试加载已封装到 Button事件中)

LoadReTryRefreshManager.getInstance().startLoad(this);          

3、加载结果回调,在你的请求成功和失败的回调中加入加载结果回调

            @Override
            public void onSuccess(Integer value) {
            //加载成功你要做的事.....
            
                //加载结果回调
                LoadReTryRefreshManager.getInstance().onLoadSuccess(FailedActivity.this, 
                new ShowRefreshViewListener() {
                    @Override
                    public void colseRefreshView() {
                     //关闭你的刷新View,如Dialog,下拉刷新等  
                    }
                });
            }

            @Override
            public void onFailed(Throwable e) {
            //加载失败你要做的事.....
            
                //加载结果回调
                LoadReTryRefreshManager.getInstance().onLoadFailed(FailedActivity.this, 
                e.getMessage(), new ShowRefreshViewListener() {
                    @Override
                    public void colseRefreshView() {
                       //关闭你的刷新View,如Dialog,下拉刷新等
                    }
                });
            }        

4、解除绑定,可以直接写在 BaseFragment的 onDestroyView方法中,会自动判断然后进行解绑

@Override
    public void onDestroyView() {
        super.onDestroyView();
        LoadReTryRefreshManager.getInstance().unRegister(this);
    }

为何必须在布局中套一层 FrameLayout

目前为了在4.4,5.0,6.0,7.0及以上的版本中实现沉浸式状态栏或者是透明式状态栏的适配,实现方式主要在低版本中有所不同,有的是设置全屏然后给Toolbar加一个PaddingTop来留出StatusBar的高度,有的是设置全屏StatusBar透明,然后再动态插入一个大小一致的View来占位,达到设置状态栏颜色的目的,因此,如果单纯的在DecorView中来插入加载布局,难以控制加载页面的MarginTop,可能会遮盖到Toolbar,所以退而求其次,在布局中需要加载的部分包一层FrameLayout,再通过递归View树来找到需要添加加载布局的地方,进行动态插入,这样就不需要处理兼容沉浸式状态栏或者是透明式状态栏的适配造成的问题(当然如果有更好的想法,强烈欢迎Issues或者邮箱建议)

反馈与建议

License

Copyright (c) [2018] [static]

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.