前言: 之前SmartLoadingView1.0的时候,我也发了一篇掘金。我把自己自定这个View的过程和细节及动画进行了讲解。反应还不错。但是虽然博客反应好,但是github的star量却少的可怜。我一直没有发现原因。直到最近我在重构MVVMdemo的时候,用了下自己的控件,虽然没有bug。但是api非常不好用,包括方法接口,太长。一个简单的功能,一大段代码。于是作者用了1周的时间,进行翻天覆地的改变。不但更新了api而且还增加了很多功能。那么接下来简单介绍下怎么用吧。
添加依赖
- 项目build.gradle添加如下
allprojects { repositories { maven { url 'https://jitpack.io' } } }
- app build.gradle添加如下
dependencies { implementation 'com.github.lihangleo2:SmartLoadingView:2.0.1' }
使用(下方有属性说明)
<com.lihang.smartloadview.SmartLoadingView
android:id="@+id/smartLoadingView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自带dialog按钮"
android:textColor="#fff"
android:textSize="15dp"
app:background_normal="#fff"
app:errorMsg="联网失败文案"
app:background_error="#ED7676"
app:background_cannotClick="#bbbbbb"
app:cornerRaius="30dp"
app:textScrollMode="marquee"
app:smart_clickable="true"
app:speed="400"
/>
效果展示(截图分辨率低,请扫描下文二维码体验效果)
一、开启动画和转场动画的使用
1.1、动画结束后自动跳转 | 1.2、自己监听动画实现逻辑 |
---|---|
1.1、动画结束后自动跳转
这里点击事件和普通的控件点击事件一致。设置setOnClickListener()即可。
smartLoadingView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
smartLoadingView.start();
Observable.timer(2000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread()).subscribe(along -> {
smartLoadingView.onSuccess(MainActivity.this, SecondActivity.class);
});
}
});
点击按钮,联网开始时,启动动画
smartLoadingView.start();
这里我用了RxJava延迟了2s 模拟联网成功。你也可以用handler延迟实现这个功能,这里用了下lambda表达式,可以忽略,只要看下面代码。
//这样既可实现,从一个页面转场动画跳转到另外一个页面(注意这样跳转,第一个页面会被finish掉)。
smartLoadingView.onSuccess(MainActivity.this, SecondActivity.class);
1.2、自己监听动画实现逻辑
前面点击事件和启动动画和 1.1 都一样,不同的时,联网成功的时候,增加动画结束的监听(这里逻辑都是自己处理,不会关闭和跳转任何页面)
smartLoadingView.onSuccess(new SmartLoadingView.AnimationFullScreenListener() {
@Override
public void animationFullScreenFinish() {
Toast.makeText(MainActivity.this, "监听动画结束", Toast.LENGTH_SHORT).show();
}
});
二、联网请求失败的样式
2.1、请求失败,文案显示在控件上 | 2.2、请求失败,回到初始状态 |
---|---|
2.1、请求失败,文案显示在控件上
这里点击和启动动画都和上面一致。如果你xml里设置了失败文案的话,联网失败时,只需要调用
smartLoadingView.netFaile();
当然,如果你再联网前并不知道失败文案也可以这样,带入当前失败的文案
smartLoadingView.netFaile(msg);
2.2、请求失败,回到初始状态
如果你们的需求是,失败文案显示在别的地方,或者只是弹一个toast,按钮箱回到初始状态,只需要这样
smartLoadingView.backToStart();
三、正常的联网请求(目前作者用于关注)
3.1、正常的联网,正常出结果 | 3.2、正常联网,打勾出结果 |
---|---|
3.3、打勾出结果,打勾消失 | 3.4、打勾出结果,提醒用户 |
3.1、正常的联网,正常出结果
这里点击事件和启动动画都和之前一样。正常出结果,只需要结合失败的方法去使用,失败文案,失败背景设置成关注成功的样式,调用只需要这样
smartLoadingView.netFaile("关注成功");
再次点击后,回到初始状态。注意这里不能使用backToStart()。因为backToStart()是出结果时使用,即使你使用也不起效果,这里已经出了结果“关注成功”。所以此时,再次点击,需要如下
smartLoadingView.reset();
3.2、正常联网,打勾出结果
前面都是一样的,只是出结果时,实现AnimationOKListener接口
smartLoadingView.onSuccess(new SmartLoadingView.AnimationOKListener() {
@Override
public void animationOKFinish() {
Toast.makeText(MainActivity.this, "关注成功", Toast.LENGTH_SHORT).show();
}
});
3.3、打勾出结果,打勾消失
如果想实现抖音那样,打勾后,打勾消失,只需要实现,添加一个模式就好了,OKAnimationType.HIDE。(当然上面就是默认的OKAnimationType.NORMAL)
smartLoadingView.onSuccess(new SmartLoadingView.AnimationOKListener() {
@Override
public void animationOKFinish() {
Toast.makeText(MainActivity.this, "关注成功", Toast.LENGTH_SHORT).show();
}
}, SmartLoadingView.OKAnimationType.HIDE);
3.4、打勾出结果,提醒用户
这个就有点类似提醒效果,不管你的控件在屏幕上的任何位置,最终都会运行到屏幕中间,提醒用户,成功了。也只需添加一个模式OKAnimationType.TRANSLATION_CENTER
smartLoadingView.onSuccess(new SmartLoadingView.AnimationOKListener() {
@Override
public void animationOKFinish() {
Toast.makeText(MainActivity.this, "关注成功", Toast.LENGTH_SHORT).show();
}
}, SmartLoadingView.OKAnimationType.TRANSLATION_CENTER);
四、文字超出一行,文字自动滚动
设计这个的初衷是因为,可能按钮的错误文案太长了,按钮放不下时使用的
4.1、文字来回滚动 | 4.2、仿跑马灯滚动 |
---|---|
4.1、文字来回滚动
只需要在xml里加上 app:textScrollMode=“normal”。或者可以不加,因为默认滚动就是这种方式
4.2、仿跑马灯滚动
xml里只需要加上 app:textScrollMode=“marquee”
五、设置不可点击状态
5.1、设置不可点击状态 | |
---|---|
5.1、设置不可点击状态
在xml里可以通过app:smart_clickable="false"进行设置。当然也能通过代码来设置
smartLoadingView.setSmartClickable(false);
六、这里作者还提供了2个小demo。登录demo和关注demo
6.1、登录demo | 6.2、关注demo |
---|---|
可以下载demo自行查看
扫描二维体验效果(下载密码是:123456)
七、自定义属性
按钮文案
- android:text=“自带dialog按钮” 使用了textView的text文字属性
按钮文案颜色值
- android:textColor="#fff" 使用了textView的textColor颜色值属性
按钮文案字体大小
- android:textSize=“15dp” 使用了textView的字体大小
正常情况下的背景颜色值
- app:background_normal="#fff" 按钮正常的背景颜色值
联网失败文案
- app:errorMsg=“联网失败文案” 联网失败展示的文案,比如登录时,账号密码错误
联网失败下的背景颜色值
- app:background_error="#ED7676" 联网失败时展示的背景颜色值,一般为殷红色
不可点击状态下的背景颜色值
- app:background_cannotClick="#bbbbbb" 不可点击状态下的背景颜色值
圆角属性
- app:cornerRaius=“30dp” 背景的圆角属性
文字滚动模式(文字超过一行时,文字自动滚动)
- app:textScrollMode=“marquee” 比如联网失败后,失败文案太长了。文字自动滚动,这里有2种方式。1、normal来回滚动。 2、marquee跑马灯效果
文字滚动速度
- app:speed=“400” 文字的滚动速度。可以理解为一个文字滚动出屏幕外需要的时间
按钮的点击状态
- app:smart_clickable=“true” 不设置时,默认可以点击,为true。代码里也能通过 smartLoadingView9.setSmartClickable(false) 进行设置
这里稍微说下长宽
长宽都是用系统的layout_width和layout_height,包括设置padding。如果不设置,是有默认间距的
八、github地址
8.1、1.0版本的SmartLoadingView有详细讲解
- 1.0版讲解
- 2.0版本,改动很大。其中比如控件继承的是TextView。使用了系统的长宽等属性你,不需要自己去测量。代码也越来越规范了
- 如果反应不错,作者会出一片从0开始讲解这篇自定义View的教程。兄弟们帮点个赞吧
8.2、关于作者。
Android工作多年了,一直向往大厂。在前进的道路上是孤独的。如果你在学习的路上也感觉孤独,请和我一起。让我们在学习道路上少些孤独
- 关于我的经历
- QQ群: 209010674 (点击图标,可以直接加入)