大有可爲,SuperTextView(v3.2.1)

Hi,開發者,來見識一下全新的 SuperTextView 吧!html

stv_page1.gif
stv_page2.gif
stv_page3.gif
stv_page4.gif

💡以上演示,均由 SuperTextView 提供強力驅動支持。android

SuperTextView 的不同凡響在於,它只是一個簡單的控件元素,但卻不只僅是一個控件。它生而靈動多變,強大的內嵌邏輯,爲你持續提供豐富多彩卻異常簡單的開發支持。c++

SuperTextView 將你從複雜的渲染邏輯中解救出來,一行簡單的 API 接口調用,炫目的渲染效果即刻呈現。git

你只需享受本身所編寫出的驚人視效,剩下的一切就放心交給 SuperTextViewgithub

在全新的 v3.2.1 版本中,SuperTextView 再一次從新定義了本身。開發者,來看看精心爲你準備的驚喜吧!🎉🎉🎉緩存

這是... Gif ?

這一次,SuperTextView 爲開發者帶來了強力的 Gif 驅動支持。bash

若是在過去,你曾經爲如何在 Android 平臺上展現一張 Gif 圖而苦惱多日,或是困於一些三方 Gif 庫的性能深淵中迷失方向。那麼如今,SuperTextView 將完全改變這一現狀。網絡

gif_demo1.gif

Gif 圖與 SuperTextView 生而渾然天成,所以,你能夠經過最熟悉的、最天然的方式來讓一張 Gif 圖得到展現。就像你過去展現一張普通圖片那樣簡單。app

得益於 c/c++ 的超高性能,以及對內存的精確操做。SuperTextView 經過使用 c/c++ 爲移動平臺專門定製了性能強悍的 Gif 驅動引擎。異步

SuperTextViewGif 引擎,可以精確操做圖像像素內存,在 Gif 圖像的幀刷新時,只對局部像素內存進行更新,這讓 Gif 圖像渲染效率獲得了質的飛躍。

經過異步離屏渲染及多緩衝技術,使得 SuperTextView 即便在流暢展現超大 Gif 圖像的時候,依舊可以保持應用界面絲滑的流暢度,以及靈敏的響應速度。

gif_demo2.gif

💡以上 Demo 中,使用 SuperTextView 展現了一張 近17M 大小,包含有 265 幀圖像的 Gif 圖,用戶界面依舊無比流暢。

展現 Gif 超簡單!

SuperTextView 中展現一張 Gif 圖,超簡單!

你能夠直接 XML 佈局文檔中配置,或者在代碼中進行添加。

XML 中配置 Gif

<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 圖。

在代碼中配置 Gif

stv_1 = (SuperTextView) findViewById(R.id.stv_1);
stv_1.setDrawable(R.drawable.gif_1);
複製代碼

就是這麼簡單、天然,SuperTextView 可讓你毫無感知,就能配置展現一張 Gif 圖。

SuperTextView 的內核邏輯中,SuperTextView 可以智能的對普通圖和 Gif 圖進行分類,而後做出相應的處理和優化。

展現網絡 Gif,同樣簡單

若是你的 Gif 圖不在本地,而在雲端,怎麼辦?

你無需煩惱!一切放心交給 SuperTextView

stv_1 = (SuperTextView) findViewById(R.id.stv_1);
stv_1.setUrlImage("http://example.com/images/example.gif");
複製代碼

只需一行代碼,SuperTextView 會在後臺協助你完成 Gif 圖的加載,而後處理渲染到屏幕上。

💡實際上,SuperTextViewDrawable1Drawable2 圖像展現位,都可用來展現 Gif 圖。總之,一切都是你所熟悉的樣子。

你能夠掌控的更多

SuperTextView 所提供給開發者的不只僅是展現 Gif 圖這麼簡單,你能夠掌控更多的細節。

播放/暫停

你能夠隨時控制 Gif 圖,播放,或者暫停。

if (stv.getDrawable() instanceof GifDrawable) {
  // 先獲取到 GifDrawable 對象
  GifDrawable gifDrawable = (GifDrawable) stv.getDrawable();

  // 播放
  gifDrawable.play();

  // 暫停
  gifDrawable.stop();
}
複製代碼

gif_demo3.gif

跳轉/獲取指定幀

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);
}
複製代碼

gif_demo4.gif

你能夠了若指掌

經過 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();
    複製代碼

更出彩的 Gif

SuperTextView 憑藉對 Gif 渲染的無縫融合,此前 Drawable1Drawable2 的一切配置項,在展現 Gif 圖時,也一樣可以生效。

Gif 做爲普通 Drawable

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_demo5.gif

如今,將 Gif 旋轉 90 度試試。

<com.coorchice.library.SuperTextView
    ...
    // 設置 Gif 旋轉 90 度
    app:stv_state_drawable_rotate="90"
    ...
/>
複製代碼

image

將 Gif 圓角化

SuperTextView 難以想象的實現了 Gif 圖的圓角化,爲開發者提供了更多的可能。

image

然而,實現這種效果卻驚人的簡單。

<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 加上邊框

你甚至能夠垂手可得的給一張 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"/>
複製代碼

效果即刻呈現...

gif_demo8.gif

輕鬆實現動態頭像

在過去,一些炫酷的動效,每每會止步於實現的複雜度和成本。而 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");
複製代碼

gif_demo9.gif

更多的驚喜

兩個 Drawable 都支持點擊!

在新版本的 SuperTextView 中,Drawable1Drawable2 被賦予了全新的能力 —— 支持精確的響應點擊動做。

image

SuperTextView 經過監控點擊動做發生的位置,可以準確的定位到其所發生的區域(Drawable1Drawable2 或者 其它區域),而後觸發相應的回調監聽。

你能夠爲 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

    將圖片剪裁居中。默認值。

image

其它更新

  • XML 佈局文檔中,Drawable1Drawable2 如今支持直接設置 顏色 或者 ShapeDrawable

    // circle_f9ad36 爲 xml 中編寫的 shape 文件
    app:stv_state_drawable="@drawable/circle_f9ad36"
    
    // 使用純色做爲 Drawable
    app:stv_state_drawable="#000000"
    複製代碼
  • ⚠️ 最低支持版本 API 提高到 19

  • 渲染性能比過去提高至少 30%

  • 升級默認圖片加載引擎,支持智能緩存。也許如今,你沒必要再引入第三方圖片加載庫了。

💡隨着 5G 帶來更快的網速,以及設備性能愈來愈強悍,用戶界面會愈來愈須要更多的動態展現(過去大量的靜態用戶界面實在是太死氣沉沉了)來刺激使用者的感官,激發用戶的興趣。而 SuperTextView 可以幫助開發者輕鬆的完成即將到來的這一過渡轉變。

如何開始 SuperTextView v3.2.1 ?

在項目 build.gradle 中加入:

dependencies {
    ...

    implementation 'com.github.chenBingX:SuperTextView:v3.2.1'

    ...
}
複製代碼

傳送門區域


相關文章
相關標籤/搜索