從 SuperTextView 誕生之初,便始終堅持一個願景,即幫助 Android 開發者愉悅的去構建一個應用。git
通過一年多的不斷的聆聽、思考、探索、驗證, SuperTextView 完成了屢次迭代,改善了一些問題,新增了一些功能,不斷的完善,以帶給開發者更好的開發體驗。github
現在, SuperTextView 已經具有了諸如圓角、邊框、描邊、按壓變色、多狀態圖、圓角圖、萬能的 Adjuster 、加載網絡圖片等一系列的經常使用功能。得益於此,開發者可以輕鬆實現各類本來十分麻煩的效果,節省大量的開發時間,有效減小頁面的複雜度,下降項目維護成本。bash
寫代碼,本應如此愉悅!網絡
早在幾個月前,就開始有不少開發者向 CoorChice 建議,是否可以讓 SuperTextView 具有加載網絡圖片的功能。其實這也是 CoorChice 好久以前就有考慮過的,但在 SuperTextView 的早期,完善其核心功能仍然是首要目標,因此一直沒涉獵到圖片相關的功能。框架
直到上一個大版本,SuperTextView v2.0,CoorChie 才嘗試添加了圖片展現的功能。這使得SuperTextView 可以使用的範圍獲得了擴大,同時針對圖片也推出了給圖片增長描邊、設置圓角、設置狀態圖等功能。相關使用文檔可到如下連接查閱:ide
【你好, SuperTextView】 - https://www.jianshu.com/p/1b91e11e441dsvg
這一次嘗試,得到了開發者們不錯的反響,你們對於使用 SuperTextView 去展現處理圖片是有所期待的。上一個版本發佈後,開發者們對於一個能展現網絡圖片的 SuperTextView 彷佛更加的感興趣了。佈局
那麼,如今,你所期待已久的 SuperTextView 在此!this
顯示一張網絡圖片,在 SuperTextView 中只須要以下代碼:url
SuperTextView stv_1 = (SuperTextView) findViewById(R.id.stv_1);
//填入圖片Url
stv_1.setUrlImage(url);
複製代碼
效果就如上圖中的第二個顯示頭像的例子同樣。
若是你但願將網絡圖片做爲 SuperTextView 的 StateDrawable 來展現的話,徹底沒問題。
//填入圖片Url
stv_1.setUrlImage(url, false);
複製代碼
第二個參數爲 false 表示網絡圖片將不會被做爲背景充滿整個 SuperTextView,而是做爲一個狀態圖。固然,有關狀態圖的一切配置都將運用到此。就像上圖中的第一個例子同樣,整個佈局包括圖片、文字、背景都在一個 SuperTextView 中被處理,從網絡下載的圖片被做爲 StateDrawable 放到了圖中的位置。
SuperTextView 爲了保持依賴庫的純淨和儘量小的體積,並無內置任何的圖片加載框架。因此默認狀況,將使用內置的一個簡易圖片引擎去下載圖片,確保開發者可以正常使用展現網絡圖片的功能。
但 CoorChice 仍然建議開發者根據項目的具體狀況,選擇一個目前正在使用的圖片加載框架,設置到 SuperTextView 中,以用來加載圖片。 SuperTextView 具有適配任意圖片加載框架的能力。下面 CoorChice 將經過 Glide 和 Picasso 的例子展現如何將現有的圖片框架安裝到 SuperTextView 中。
在 SuperTextView 中,核心的圖片加載引擎被抽象成接口 Engine ,開發者須要根據所用的圖片框架,實現一個 Engine。
public class GlideEngine implements Engine {
private Context context;
public GlideEngine(Context context) {
this.context = context;
}
@Override
public void load(String url, final ImageEngine.Callback callback) {
Glide.with(context).load(url).into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
// 主要是經過callback返回Drawable對象給SuperTextView
callback.onCompleted(resource);
}
});
}
}
複製代碼
public class PicassoEngine implements Engine {
private Context context;
public PicassoEngine(Context context) {
this.context = context;
}
@Override
public void load(String url, final ImageEngine.Callback callback) {
Picasso.with(context).load(url).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
// 主要是經過callback返回Drawable對象給SuperTextView
callback.onCompleted(new BitmapDrawable(Resources.getSystem(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
}
複製代碼
實現好 Engine 後,下一步就是要將其安裝到 SuperTextView 中。
CoorChice 建議能夠在 Application的onCreate()
中進行安裝,這樣當須要使用 SuperTextView 加載顯示網絡圖片的時候,就可以用到三方圖片框架了。
public class STVApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 安裝圖片引擎
ImageEngine.install(new GlideEngine(this));
// ImageEngine.install(new PicassoEngine(this));
}
}
複製代碼
一行代碼,輕鬆安裝。
須要注意的是,任什麼時候候,後安裝的 Engine 實例老是會替換掉先前安裝的 Engine 實例,即 SuperTextView 只容許全局存在一個 Engine 實例。
如今,你可讓 SuperTextView 使用指定的三方圖片加載框架去加載圖片了。
dependencies {
compile 'com.github.chenBingX:SuperTextView:v3.0.0'
}
複製代碼
點擊這裏跳轉SuperTextView項目地址。https://github.com/chenBingX/SuperTextView
- 若是你喜歡SuperTextView,但願能順手到 Github 點個star以示鼓勵哦!
- 抽出空餘時間寫文章分享須要動力,還請各位看官動動小手點個贊,CoorChice謝謝各位老鐵啊😄
- CoorChice一直在不按期的創做新的乾貨,想要上車只需進到CoorChice的【我的主頁】點個關注就行了哦。發車嘍~
點擊這裏跳轉SuperTextView項目地址。https://github.com/chenBingX/SuperTextView