Hi,開發者,來見識一下全新的 SuperTextView 吧!html
💡以上演示,均由 SuperTextView 提供強力驅動支持。android
SuperTextView 的不同凡響在於,它只是一個簡單的控件元素,但卻不只僅是一個控件。它生而靈動多變,強大的內嵌邏輯,爲你持續提供豐富多彩卻異常簡單的開發支持。c++
SuperTextView 將你從複雜的渲染邏輯中解救出來,一行簡單的 API 接口調用,炫目的渲染效果即刻呈現。git
你只需享受本身所編寫出的驚人視效,剩下的一切就放心交給 SuperTextView。github
在全新的 v3.2.1
版本中,SuperTextView 再一次從新定義了本身。開發者,來看看精心爲你準備的驚喜吧!🎉🎉🎉緩存
這一次,SuperTextView 爲開發者帶來了強力的 Gif 驅動支持。bash
若是在過去,你曾經爲如何在 Android 平臺上展現一張 Gif 圖而苦惱多日,或是困於一些三方 Gif 庫的性能深淵中迷失方向。那麼如今,SuperTextView 將完全改變這一現狀。網絡
Gif 圖與 SuperTextView 生而渾然天成,所以,你能夠經過最熟悉的、最天然的方式來讓一張 Gif 圖得到展現。就像你過去展現一張普通圖片那樣簡單。app
得益於 c/c++ 的超高性能,以及對內存的精確操做。SuperTextView 經過使用 c/c++ 爲移動平臺專門定製了性能強悍的 Gif 驅動引擎。異步
SuperTextView 的 Gif 引擎,可以精確操做圖像像素內存,在 Gif 圖像的幀刷新時,只對局部像素內存進行更新,這讓 Gif 圖像渲染效率獲得了質的飛躍。
經過異步離屏渲染及多緩衝技術,使得 SuperTextView 即便在流暢展現超大 Gif 圖像的時候,依舊可以保持應用界面絲滑的流暢度,以及靈敏的響應速度。
💡以上 Demo 中,使用 SuperTextView 展現了一張 近17M 大小,包含有 265 幀圖像的 Gif 圖,用戶界面依舊無比流暢。
在 SuperTextView 中展現一張 Gif 圖,超簡單!
你能夠直接 XML 佈局文檔中配置,或者在代碼中進行添加。
<com.coorchice.library.SuperTextView
android:id="@+id/stv_1"
android:layout_width="match_parent"
android:layout_height="150dp"
// 配置 Gif
app:stv_state_drawable="@drawable/gif_1" />
複製代碼
你能夠像配置一張普通圖片同樣,爲 SuperTextView 配置展現 Gif 圖。
stv_1 = (SuperTextView) findViewById(R.id.stv_1);
stv_1.setDrawable(R.drawable.gif_1);
複製代碼
就是這麼簡單、天然,SuperTextView 可讓你毫無感知,就能配置展現一張 Gif 圖。
在 SuperTextView 的內核邏輯中,SuperTextView 可以智能的對普通圖和 Gif 圖進行分類,而後做出相應的處理和優化。
若是你的 Gif 圖不在本地,而在雲端,怎麼辦?
你無需煩惱!一切放心交給 SuperTextView。
stv_1 = (SuperTextView) findViewById(R.id.stv_1);
stv_1.setUrlImage("http://example.com/images/example.gif");
複製代碼
只需一行代碼,SuperTextView 會在後臺協助你完成 Gif 圖的加載,而後處理渲染到屏幕上。
💡實際上,SuperTextView 的 Drawable1 和 Drawable2 圖像展現位,都可用來展現 Gif 圖。總之,一切都是你所熟悉的樣子。
SuperTextView 所提供給開發者的不只僅是展現 Gif 圖這麼簡單,你能夠掌控更多的細節。
你能夠隨時控制 Gif 圖,播放,或者暫停。
if (stv.getDrawable() instanceof GifDrawable) {
// 先獲取到 GifDrawable 對象
GifDrawable gifDrawable = (GifDrawable) stv.getDrawable();
// 播放
gifDrawable.play();
// 暫停
gifDrawable.stop();
}
複製代碼
在 SuperTextView 中,你能夠隨時到達你指定的幀圖像,以及可以提取到指定幀的圖像。
if (stv.getDrawable() instanceof GifDrawable) {
// 先獲取到 GifDrawable 對象
GifDrawable gifDrawable = (GifDrawable) stv.getDrawable();
// 跳轉到指定幀
gifDrawable.gotoFrame(pre);
// 獲取指定幀
Bitmap frame = gifDrawable.getFrame(i);
}
複製代碼
💡因爲 SuperTextView 可以支持局部增量渲染,因此當你的 Gif 圖支持這種渲染模式時,意味着你可能須要經過調用
gifDrawable.setStrict(true)
開啓 嚴格模式,來確保幀跳轉或者幀提取的圖像是正確的。這可能會花費一些時間,因此你應該儘可能將 嚴格模式 下的操做放到異步線程中進行。
SuperTextView 容許你隨意的修改 Gif 圖的播放速率。
if (stv.getDrawable() instanceof GifDrawable) {
// 先獲取到 GifDrawable 對象
GifDrawable gifDrawable = (GifDrawable) stv.getDrawable();
// 設置幀播放間隔時間,20ms
gifDrawable.setFrameDuration(20);
}
複製代碼
經過 SuperTextView 你能夠對一張 Gif 圖像的信息瞭若指掌。
獲取 Gif 尺寸
// 獲取寬度
int width = gifDrawable.getWidth();
// 獲取高度
int height = gifDrawable.getHeight();
複製代碼
獲取 Gif 幀信息
// 獲取幀數
int frameCount = gifDrawable.getFrameCount();
// 獲取當前幀間隔
int frameDuration = gifDrawable.getFrameDuration();
// 獲取當前渲染到那一幀
int framePotision = gifDrawable.getCurrentFrame();
// 是否在播放
boolean isPlaying = gifDrawable.isPlaying();
複製代碼
SuperTextView 憑藉對 Gif 渲染的無縫融合,此前 Drawable1 和 Drawable2 的一切配置項,在展現 Gif 圖時,也一樣可以生效。
app:stv_state_drawable_rotate="90"
複製代碼
來看看在本來的 Drawable 位置放上一張 Gif 圖會發生什麼神奇的事情。
<com.coorchice.library.SuperTextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingLeft="62dp"
android:paddingRight="10dp"
android:text="小火箭發射了!啦啦啦啦啦啦..."
android:textColor="#ffffff"
android:textSize="22dp"
app:stv_corner="6dp"
app:stv_isShowState="true"
app:stv_solid="#0D1831"
// 設置 Gif
app:stv_state_drawable="@drawable/gif_1"
// 設置 Gif 高
app:stv_state_drawable_height="40dp"
// 設置 Gif 寬
app:stv_state_drawable_width="40dp"
// 設置 Gif 居左展現
app:stv_state_drawable_mode="left"
// 設置 Gif 左間距
app:stv_state_drawable_padding_left="10dp"/>
複製代碼
效果是...
如今,將 Gif 旋轉 90 度試試。
<com.coorchice.library.SuperTextView
...
// 設置 Gif 旋轉 90 度
app:stv_state_drawable_rotate="90"
...
/>
複製代碼
SuperTextView 難以想象的實現了 Gif 圖的圓角化,爲開發者提供了更多的可能。
然而,實現這種效果卻驚人的簡單。
<com.coorchice.library.SuperTextView
android:layout_width="185dp"
android:layout_height="138.75dp"
android:layout_gravity="center_horizontal"
app:stv_corner="20dp"
// 設置 Gif 做爲控件背景
app:stv_drawableAsBackground="true"
app:stv_scaleType="fitCenter"
// 配置 Gif
app:stv_state_drawable="@drawable/gif_1" />
複製代碼
你甚至能夠垂手可得的給一張 Gif 圖加上邊框。
<com.coorchice.library.SuperTextView
android:layout_width="350dp"
android:layout_height="148.4dp"
android:layout_gravity="center_horizontal"
android:gravity="center"
// 加上文字會顯的更有格調
android:text="SuperTextView"
android:textSize="36dp"
android:textStyle="bold"
android:visibility="invisible"
app:stv_corner="6dp"
app:stv_drawableAsBackground="true"
app:stv_isShowState="true"
app:stv_scaleType="center"
// 設置邊框顏色
app:stv_stroke_color="@color/opacity_8_gray_4c // 設置邊框寬度 app:stv_stroke_width="5dp" app:stv_text_fill_color="#ccffffff"
app:stv_text_stroke="true"
app:stv_text_stroke_color="#cc000000"
app:stv_text_stroke_width="2dp"
// 配置 Gif
app:stv_state_drawable="@drawable/gif_1"/>
複製代碼
效果即刻呈現...
在過去,一些炫酷的動效,每每會止步於實現的複雜度和成本。而 SuperTextView 爲你帶了更多的可能,你的靈感能夠無拘無束。
好比,動態頭像的實現,多是迄今爲止最簡單的。
<com.coorchice.library.SuperTextView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="30dp"
app:stv_corner="40dp"
// 設置爲背景圖
app:stv_drawableAsBackground="true"
// 配置 Gif 頭像
app:stv_state_drawable="@drawable/gif_avatar"
// 添加邊框
app:stv_stroke_color="#ffffff"
app:stv_stroke_width="3dp"
/>
複製代碼
在代碼中,你能夠直接配置一張網絡動態頭像。
stv.setUrlImage("http://gif_avatar.gif");
複製代碼
在新版本的 SuperTextView 中,Drawable1 和 Drawable2 被賦予了全新的能力 —— 支持精確的響應點擊動做。
SuperTextView 經過監控點擊動做發生的位置,可以準確的定位到其所發生的區域(Drawable1、Drawable2 或者 其它區域),而後觸發相應的回調監聽。
你能夠爲 SuperTextView 設置 Drawable 上的點擊動做監聽器,以便在動做發生時,做出必要的響應。
stv.setOnDrawableClickedListener(new SuperTextView.OnDrawableClickedListener() {
@Override
public void onDrawable1Clicked(SuperTextView stv) {
// Drawable1 clicked,do something...
}
@Override
public void onDrawable2Clicked(SuperTextView stv) {
// Drawable2 clicked,do something...
}
});
stv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 非 Drawable 區域被點擊,do something...
}
});
複製代碼
如今,當你將 Drawable1 做爲背景圖時,你能夠爲它配置不一樣的縮放模式,以達到你心儀的效果。
stv.setScaleType(ScaleType.CENTER);
複製代碼
SuperTextView 爲開發者提供了多達 3 種縮放模式:
ScaleType.FIT_XY
將圖片拉伸/壓縮平鋪。
ScaleType.FIT_CENTER
將圖片自適應居中。
ScaleType.CENTER
將圖片剪裁居中。默認值。
在 XML 佈局文檔中,Drawable1 和 Drawable2 如今支持直接設置 顏色 或者 ShapeDrawable。
// circle_f9ad36 爲 xml 中編寫的 shape 文件
app:stv_state_drawable="@drawable/circle_f9ad36"
// 使用純色做爲 Drawable
app:stv_state_drawable="#000000"
複製代碼
⚠️ 最低支持版本 API 提高到 19。
渲染性能比過去提高至少 30%。
升級默認圖片加載引擎,支持智能緩存。也許如今,你沒必要再引入第三方圖片加載庫了。
💡隨着 5G 帶來更快的網速,以及設備性能愈來愈強悍,用戶界面會愈來愈須要更多的動態展現(過去大量的靜態用戶界面實在是太死氣沉沉了)來刺激使用者的感官,激發用戶的興趣。而 SuperTextView 可以幫助開發者輕鬆的完成即將到來的這一過渡轉變。
在項目 build.gradle
中加入:
dependencies {
...
implementation 'com.github.chenBingX:SuperTextView:v3.2.1'
...
}
複製代碼
【傳送門】:《SuperTextView 開發參考文檔》- 你能夠學習到如何使用 SuperTextView 來提升你的應用的構建效率
【傳送門】:《SuperTextView API文檔》— 你能夠查看 SuperTextView 全部可用 API 及屬性
- 若是你喜歡 SuperTextView,就到 Github 點個 star 🌟 支持哦!
- CoorChice 會不按期的在博客平臺分享乾貨,快進入 CoorChice的【我的主頁】 關注一波吧。