# LoadingButton [![LoadingButton](https://jitpack.io/v/FlodCoding/LoadingButton.svg)](https://jitpack.io/#FlodCoding/LoadingButton)
一个小巧灵活的带加载功能的按钮控件,继承自[DrawableTextView](https://github.com/FlodCoding/DrawableTextView),加载动画来自于[CircularProgressDrawable](https://developer.android.google.cn/reference/android/support/v4/widget/CircularProgressDrawable?hl=en)
## 特性
* 支持按钮收缩
* 支持加载完成和失败图标显示
* 可设置加载动画颜色、大小、位置
* 自定义圆角
## 如何导入
根目录下的build.gradle
```
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
```
App目录下的build.gradle
#### 注意!从1.1.0开始与以前的版本有较大的变动,请谨慎升级
```
dependencies {
//Androidx
implementation 'com.github.FlodCoding:LoadingButton:1.1.0-alpha01'
}
```
Support-appcompat 停止更新
~~implementation 'com.github.FlodCoding:LoadingButton:1.0.5-support'~~
## Demo [点我下载](https://github.com/FlodCoding/LoadingButton/releases/download/1.1.0-alpha01/demo-1.1.0-alpha01.apk)
![下载.png](https://upload-images.jianshu.io/upload_images/7565394-f96443d70435d4b3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300)
### Demo截图
![1.gif](https://upload-images.jianshu.io/upload_images/7565394-b799c91e14a8f19a.gif?imageMogr2/auto-orient/strip)
![2.gif](https://upload-images.jianshu.io/upload_images/7565394-018bbbd27694d3b5.gif?imageMogr2/auto-orient/strip)
![3.gif](https://upload-images.jianshu.io/upload_images/7565394-88becf790d21d7fc.gif?imageMogr2/auto-orient/strip)
![4.gif](https://upload-images.jianshu.io/upload_images/7565394-f2ad03c89d715afa.gif?imageMogr2/auto-orient/strip)
## 基本用法
### XML
```
```
### Code
```
loadingBtn.start(); //开始加载
loadingBtn.complete(true); //加载成功
loadingBtn.complete(false); //加载失败
loadingBtn.cancel(); //加载取消
loadingBtn.setEnableShrink(true)
.setEnableRestore(true)
.setDisableClickOnLoading(true)
.setShrinkDuration(450)
.setLoadingPosition(DrawableTextView.POSITION.START)
.setSuccessDrawable(R.drawable.ic_successful)
.setFailDrawable(R.drawable.ic_fail)
.setEndDrawableKeepDuration(900)
.setLoadingEndDrawableSize((int) (loadingBtn.getTextSize() * 2));
loadingBtn.getLoadingDrawable().setStrokeWidth(loadingBtn.getTextSize() * 0.14f);
loadingBtn.getLoadingDrawable().setColorSchemeColors(loadingBtn.getTextColors().getDefaultColor());
```
### 状态回调
start --> onShrinking --> onLoadingStart
complete --> onLoadingStop --> onEndDrawableAppear --> onCompleted --> onRestored
```
public static class OnStatusChangedListener {
public void onShrinking() {}
public void onLoadingStart() {}
public void onLoadingStop() {}
public void onEndDrawableAppear(boolean isSuccess, EndDrawable endDrawable) {}
public void onRestoring() {}
public void onRestored() {}
public void onCompleted(boolean isSuccess) { }
public void onCanceled() {}
}
```
## 属性说明
### XML
属性名|类型|默认值|说明
---|:--:|:---:|---:
enableShrink |boolean |true |开始加载时收缩
disableClickOnLoading |boolean |true |加载时禁用点击
enableRestore |boolean |false |完成时,恢复按钮
radius |dimension |0dp |设置按钮的圆角,**(需要SDK>=21)**
(来自([DrawableTextView](https://github.com/FlodCoding/DrawableTextView))
shrinkDuration |integer |450ms |收缩动画时间
shrinkShape |enum
(Default,Oval) |Oval |收缩后的形状 **(需要SDK>=21)**
(Default:保持原来的形状,Oval:圆形)
loadingEndDrawableSize |dimension |TextSize \*2 |设置LoadingDrawable和EndDrawable大小
loadingDrawableColor |reference |TextColor |设置Loading的颜色
loadingDrawablePosition |enum
(Start,Top,
End,Bottom) |Start |设置Loading的位置
endSuccessDrawable |reference | null |完成时显示的图标
endFailDrawable |reference | null |失败时显示的图标
endDrawableAppearTime |integer | 300ms |完成或失败图标从无到有的时间
endDrawableDuration |integer | 900ms |完成或失败图标停留的时间
### Public Func
方法名|参数说明|默认值|说明
---|:--:|:---:|---:
start() |- |- |开始加载
complete(boolean isSuccess) |是否成功 |- |完成加载
cancel()
cancel(boolean withRestoreAnim) |是否执行恢复动画 |true |取消
setEnableShrink(boolean enable) |- |true |设置加载时按钮收缩
setEnableRestore(boolean enable) |- |false |设置完成时按钮恢复(形状和文字)
setRadius(@Px int px)
setRadiusDP(int dp) |Px/Dp |0 |设置按钮的圆角
**(需要SDK>=21)**
(来自([DrawableTextView](https://github.com/FlodCoding/DrawableTextView))
setShrinkShape(@ShrinkShape int shrinkShape) |Default:保持原来的形状,
Oval:圆形 |Oval |收缩后的形状
**(需要SDK>=21)**
setShrinkDuration(long time) |milliseconds |450ms |收缩动画时间
setLoadingEndDrawableSize(@Px int px) |单位Px |TextSize \*2 |设置LoadingDrawable和EndDrawable大小
setLoadingPosition(@POSITION int position) |Start,Top,End,Bottom |Start |设置Loading的位置
setSuccessDrawable(@DrawableRes int drawableRes)
setSuccessDrawable(Drawable drawable) |- | null |成功时显示的图标
setFailDrawable(@DrawableRes int drawableRes)
setFailDrawable(Drawable drawable) |- | null |失败时显示的图标
setEndDrawableAppearDuration(long time) |milliseconds | 300ms |完成或失败图标从无到有的时间
setEndDrawableKeepDuration(long time) |milliseconds | 900ms |完成或失败图标停留的时间
setOnStatusChangedListener
(OnStatusChangedListener listener)|-|null|按钮的各种状态回调
### 常见问题
#### 完成加载时,如何自动恢复到之前按钮的状态?
设置setEnableRestore(true)
#### 当setEnableRestore(false)时,又想某个时机恢复原来的按钮的状态,要怎么做?
执行cancel()
## Demo使用的第三方库
### [Matisse](https://github.com/zhihu/Matisse)
### [Glide](https://github.com/bumptech/glide)