前言: 以前SmartLoadingView1.0的時候,我也發了一篇掘金。我把本身自定這個View的過程和細節及動畫進行了講解。反應還不錯。可是雖然博客反應好,可是github的star量卻少的可憐。我一直沒有發現緣由。直到最近我在重構MVVMdemo的時候,用了下本身的控件,雖然沒有bug。可是api很是很差用,包括方法接口,太長。一個簡單的功能,一大段代碼。因而做者用了1周的時間,進行翻天覆地的改變。不但更新了api並且還增長了不少功能。那麼接下來簡單介紹下怎麼用吧。java
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
複製代碼
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.二、本身監聽動畫實現邏輯 |
---|---|
這裏點擊事件和普通的控件點擊事件一致。設置setOnClickListener()便可。android
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);
});
}
});
複製代碼
點擊按鈕,聯網開始時,啓動動畫git
smartLoadingView.start();
複製代碼
這裏我用了RxJava延遲了2s 模擬聯網成功。你也能夠用handler延遲實現這個功能,這裏用了下lambda表達式,能夠忽略,只要看下面代碼。github
//這樣既可實現,從一個頁面轉場動畫跳轉到另一個頁面(注意這樣跳轉,第一個頁面會被finish掉)。
smartLoadingView.onSuccess(MainActivity.this, SecondActivity.class);
複製代碼
前面點擊事件和啓動動畫和 1.1 都同樣,不一樣的時,聯網成功的時候,增長動畫結束的監聽(這裏邏輯都是本身處理,不會關閉和跳轉任何頁面)api
smartLoadingView.onSuccess(new SmartLoadingView.AnimationFullScreenListener() {
@Override
public void animationFullScreenFinish() {
Toast.makeText(MainActivity.this, "監聽動畫結束", Toast.LENGTH_SHORT).show();
}
});
複製代碼
2.一、請求失敗,文案顯示在控件上 | 2.二、請求失敗,回到初始狀態 |
---|---|
這裏點擊和啓動動畫都和上面一致。若是你xml裏設置了失敗文案的話,聯網失敗時,只須要調用app
smartLoadingView.netFaile();
複製代碼
固然,若是你再聯網前並不知道失敗文案也能夠這樣,帶入當前失敗的文案maven
smartLoadingView.netFaile(msg);
複製代碼
若是大家的需求是,失敗文案顯示在別的地方,或者只是彈一個toast,按鈕箱回到初始狀態,只須要這樣ide
smartLoadingView.backToStart();
複製代碼
3.一、正常的聯網,正常出結果 | 3.二、正常聯網,打勾出結果 |
---|---|
3.三、打勾出結果,打勾消失 | 3.四、打勾出結果,提醒用戶 |
這裏點擊事件和啓動動畫都和以前同樣。正常出結果,只須要結合失敗的方法去使用,失敗文案,失敗背景設置成關注成功的樣式,調用只須要這樣post
smartLoadingView.netFaile("關注成功");
複製代碼
再次點擊後,回到初始狀態。注意這裏不能使用backToStart()。由於backToStart()是出結果時使用,即便你使用也不起效果,這裏已經出告終果「關注成功」。因此此時,再次點擊,須要以下學習
smartLoadingView.reset();
複製代碼
前面都是同樣的,只是出結果時,實現AnimationOKListener接口
smartLoadingView.onSuccess(new SmartLoadingView.AnimationOKListener() {
@Override
public void animationOKFinish() {
Toast.makeText(MainActivity.this, "關注成功", Toast.LENGTH_SHORT).show();
}
});
複製代碼
若是想實現抖音那樣,打勾後,打勾消失,只須要實現,添加一個模式就行了,OKAnimationType.HIDE。(固然上面就是默認的OKAnimationType.NORMAL)
smartLoadingView.onSuccess(new SmartLoadingView.AnimationOKListener() {
@Override
public void animationOKFinish() {
Toast.makeText(MainActivity.this, "關注成功", Toast.LENGTH_SHORT).show();
}
}, SmartLoadingView.OKAnimationType.HIDE);
複製代碼
這個就有點相似提醒效果,無論你的控件在屏幕上的任何位置,最終都會運行到屏幕中間,提醒用戶,成功了。也只需添加一個模式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.一、文字來回滾動 | 4.二、仿跑馬燈滾動 |
---|---|
只須要在xml里加上 app:textScrollMode="normal"。或者能夠不加,由於默認滾動就是這種方式
xml裏只須要加上 app:textScrollMode="marquee"
5.一、設置不可點擊狀態 | |
---|---|
在xml裏能夠經過app:smart_clickable="false"進行設置。固然也能經過代碼來設置
smartLoadingView.setSmartClickable(false);
複製代碼
6.一、登陸demo | 6.二、關注demo |
---|---|
能夠下載demo自行查看
長寬都是用系統的layout_width和layout_height,包括設置padding。若是不設置,是有默認間距的
Android工做多年了,一直嚮往大廠。在前進的道路上是孤獨的。若是你在學習的路上也感受孤獨,請和我一塊兒。讓咱們在學習道路上少些孤獨