# SmartLoadingView - 一个自带loading的联网请求按钮
## 特点功能
想让你的按钮动起来吗,想让你的app具备活力吗。那来试试它吧。具体介绍如下:
```
1. 支持在任何布局上使用
2. smart_full_screen模式:全屏扩散跳转动画,让你的按钮和跳转页面更有活力
3. smart_tick模式:仿抖音,关注按钮及动画
4. smart_tick_hide模式:打勾动画及隐藏
5. smart_tick_center_hide模式:打勾隐藏,及移动到屏幕中间提醒模式
6. smart_button模式:正常关注和取消关注
```
## 效果展示
为录制流畅,截图分辨率模糊。可下载apk查看真机效果
* ### smart_full_screen模式:全屏扩散动画(不支持关注)
|全屏扩散页面跳转|加载失败|失败文案在按钮上|
|:---:|:---:|:---:|
|
|
|
* ### smart_button模式:正常按钮动画(支持关注)
|关注并加载成功|关注失败|不带动画关注|
|:---:|:---:|:---:|
|
|
|
* ### smart_tick模式:仿抖音打勾关注(支持关注);smart_tick_hide模式:打勾隐藏(支持关注);smart_tick_center_hide模式:打勾隐藏,并移至中间提醒(支持关注)。
|仿抖音打勾关注|打勾隐藏|打勾隐藏,移至中间|
|:---:|:---:|:---:|
|
|
|
## 基本使用
#### 一、简单使用
xml设置如下,注意app:hl_button_type="smart_button"
```xml
```
使用如下:没看错就这么简单(5种buttonType均如此)
```java
//1.1 设置点击事件,点击调用加载loading
smartLoadingView.startLoading()
//1.2 联网成功,关注成功调用如下代码
smartLoadingView.finishLoading()
//1.3 联网失败,调用如下代码
smartLoadingView.finishLoading(false)
```
#### 二、全屏模式:smart_full_screen(注意:此模式不支持关注)
##### 2.1 全屏扩散及页面跳转:smartLoadingView.finishLoadingWithFullScreen(Activity activity, Class clazz)
xml如下:
```xml
```
当点击按钮时,开启加载loading
```java
smartLoadingView.startLoading()
```
当得到联网结果为success,且需要跳转页面时调用如下:
```java
smartLoadingView.finishLoadingWithFullScreen(this, SecondActivity::class.java)
```
如果你不想用封装的api,想再扩散动画结束后自己操作,你可以使用如下方法:
```java
//kotlin使用如下:
smartLoadingView.finishLoading(true) {
//处理自定义逻辑
}
//java使用如下:
smartLoadingView.finishLoading(true, success -> {
//处理自定义逻辑
});
```
##### 2.2 如果联网结果失败fail时
执行完,就会平滑回到初始状态
```java
//kotlin使用如下:
smartLoadingView.finishLoading(false) {
ToastUtils.showShort("加载失败")
}
//java使用如下:
smartLoadingView.finishLoading(false, success -> {
ToastUtils.showShort("加载失败")
});
```
##### 2.3 如果联网结果失败,你想将错误信息显示在按钮上可以这样
xml如下:
```xml
```
调用如下即可。
```java
//如果想自定义错误文案,在调用finishLoading前,设置文案
//smartLoadingView.setAnimaledText("我是自定义错误文案")
smartLoadingView.finishLoading(false)
```
#### 三、正常模式详细讲解:smart_button(支持关注)
特别说明:smart_button、smart_tick、smart_tick_hide、smart_tick_center_hide 这四种模式,用法一致。所以这里以smart_button 讲解为主
##### 3.1 这里我们用一个关注功能来说:如果我们有个按钮,初始状态显示"点击关注",点击按钮进行网络请求,成功了显示"关注成功";此时再点击,进行网络请求,成功后再显示"点击关注"
当点击按钮时, 我们要判断当前是什么状态,来进行接下来的逻辑:
```java
if (!smartLoadingView.isFinished) {
//当前不时结束,状态,开启加载loading
smartLoadingView.startLoading()
} else {
//当前结束时,再次点击回到初始状态
//kotlin使用
smartLoadingView.isFinished = false
//java使用
//smartLoadingView.setFinished(false);
}
```
##### 3.2 联网出结果,成功 or 失败同样调用如下
```java
//true则走成功,false则走失败
//kotlin使用
smartLoadingView.finishLoading(true) {
}
//java使用
smartLoadingView.finishLoading(true, success -> {
});
```
##### 3.3 如果你不想使用动画,可以调用如下api。
```java
//kotlin使用
smartLoadingView.isFinished = true
//java使用
smartLoadingView.setFinished(true);
```
## 属性表格(Attributes)
因为SmartLoadingView就是TextView的拓展控件。部分属性延用了系统属性
|name|format|description|系统api|
|:---:|:---:|:---:|:---:|
|android:text|string|文案内容|是|
|app:hl_animaled_text|string|动画结束文案,默认为text|否|
|android:textColor|color|文案颜色|是|
|app:hl_animaled_textColor|color|动画结束文字颜色,默认为textColor|否|
|android:textSize|dimension|文案字体大小|是|
|android:background|color|背景色|是|
|app:hl_animaled_background|color|动画结束背景色,默认为background颜色值|否|
|app:hl_corners_radius|dimension|圆角属性|否|
|android:enabled|boolean|是否可被点击|是|
|app:hl_unEnabled_background|color|不可点击状态下背景色|否|
|app:hl_ellipsize|enum|reverse:来回滚动;marquee:跑马灯。需文字大于控件宽度生效|否|
|app:hl_ellipsize_speed|integer|文字滚动速度|否|
|app:hl_button_type|enum|5种buttonType样式|否|
## 方法表格(Method)
|name|format|description|
|:---:|:---:|:---:|
|startLoading()|void|开启加载loading|
|setFinished()|boolean|不带动画设置控件结束状态|
|finishLoading()|boolean|带动画设置控件结束状态|