SmartLoadingView2.0震撼來襲,跟着這篇自定義View,你不止用到,還能學到。一個自帶dialog聯網請求的button。

前言: 以前SmartLoadingView1.0的時候,我也發了一篇掘金。我把本身自定這個View的過程和細節及動畫進行了講解。反應還不錯。可是雖然博客反應好,可是github的star量卻少的可憐。我一直沒有發現緣由。直到最近我在重構MVVMdemo的時候,用了下本身的控件,雖然沒有bug。可是api很是很差用,包括方法接口,太長。一個簡單的功能,一大段代碼。因而做者用了1周的時間,進行翻天覆地的改變。不但更新了api並且還增長了不少功能。那麼接下來簡單介紹下怎麼用吧。java

添加依賴

  • 項目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.二、本身監聽動畫實現邏輯

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.1 都同樣,不一樣的時,聯網成功的時候,增長動畫結束的監聽(這裏邏輯都是本身處理,不會關閉和跳轉任何頁面)api

smartLoadingView.onSuccess(new SmartLoadingView.AnimationFullScreenListener() {
                        @Override
                        public void animationFullScreenFinish() {
                            Toast.makeText(MainActivity.this, "監聽動畫結束", Toast.LENGTH_SHORT).show();
                        }
                    });
複製代碼

2、聯網請求失敗的樣式

2.一、請求失敗,文案顯示在控件上 2.二、請求失敗,回到初始狀態

2.一、請求失敗,文案顯示在控件上

這裏點擊和啓動動畫都和上面一致。若是你xml裏設置了失敗文案的話,聯網失敗時,只須要調用app

smartLoadingView.netFaile();
複製代碼

固然,若是你再聯網前並不知道失敗文案也能夠這樣,帶入當前失敗的文案maven

smartLoadingView.netFaile(msg);
複製代碼

2.二、請求失敗,回到初始狀態

若是大家的需求是,失敗文案顯示在別的地方,或者只是彈一個toast,按鈕箱回到初始狀態,只須要這樣ide

smartLoadingView.backToStart();
複製代碼

3、正常的聯網請求(目前做者用於關注)

3.一、正常的聯網,正常出結果 3.二、正常聯網,打勾出結果
3.三、打勾出結果,打勾消失 3.四、打勾出結果,提醒用戶

3.一、正常的聯網,正常出結果

這裏點擊事件和啓動動畫都和以前同樣。正常出結果,只須要結合失敗的方法去使用,失敗文案,失敗背景設置成關注成功的樣式,調用只須要這樣post

smartLoadingView.netFaile("關注成功");
複製代碼

再次點擊後,回到初始狀態。注意這裏不能使用backToStart()。由於backToStart()是出結果時使用,即便你使用也不起效果,這裏已經出告終果「關注成功」。因此此時,再次點擊,須要以下學習

smartLoadingView.reset();
複製代碼

3.二、正常聯網,打勾出結果

前面都是同樣的,只是出結果時,實現AnimationOKListener接口

smartLoadingView.onSuccess(new SmartLoadingView.AnimationOKListener() {
                            @Override
                            public void animationOKFinish() {
                                Toast.makeText(MainActivity.this, "關注成功", Toast.LENGTH_SHORT).show();
                            }
                        });
複製代碼

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.四、打勾出結果,提醒用戶

這個就有點相似提醒效果,無論你的控件在屏幕上的任何位置,最終都會運行到屏幕中間,提醒用戶,成功了。也只需添加一個模式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.一、文字來回滾動 4.二、仿跑馬燈滾動

4.一、文字來回滾動

只須要在xml里加上 app:textScrollMode="normal"。或者能夠不加,由於默認滾動就是這種方式


4.二、仿跑馬燈滾動

xml裏只須要加上 app:textScrollMode="marquee"


5、設置不可點擊狀態

5.一、設置不可點擊狀態

5.一、設置不可點擊狀態

在xml裏能夠經過app:smart_clickable="false"進行設置。固然也能經過代碼來設置

smartLoadingView.setSmartClickable(false);
複製代碼

6、這裏做者還提供了2個小demo。登陸demo和關注demo

6.一、登陸demo 6.二、關注demo

能夠下載demo自行查看

掃描二維體驗效果(下載密碼是:123456)


7、自定義屬性

按鈕文案

  • 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種方式。一、normal來回滾動。 二、marquee跑馬燈效果

文字滾動速度

  • app:speed="400" 文字的滾動速度。能夠理解爲一個文字滾動出屏幕外須要的時間

按鈕的點擊狀態

  • app:smart_clickable="true" 不設置時,默承認以點擊,爲true。代碼裏也能經過 smartLoadingView9.setSmartClickable(false) 進行設置

這裏稍微說下長寬

長寬都是用系統的layout_width和layout_height,包括設置padding。若是不設置,是有默認間距的


8、github地址

8.一、1.0版本的SmartLoadingView有詳細講解

  • 1.0版講解
  • 2.0版本,改動很大。其中好比控件繼承的是TextView。使用了系統的長寬等屬性你,不須要本身去測量。代碼也愈來愈規範了
  • 若是反應不錯,做者會出一片從0開始講解這篇自定義View的教程。兄弟們幫點個贊吧

8.二、關於做者。

Android工做多年了,一直嚮往大廠。在前進的道路上是孤獨的。若是你在學習的路上也感受孤獨,請和我一塊兒。讓咱們在學習道路上少些孤獨

相關文章
相關標籤/搜索