大有可為,SuperTextView(v3.2.1)

supertextview_bg.png

Hi,開發(fā)者,來見識一下全新的 SuperTextView 吧!

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

??以上演示,均由 SuperTextView 提供強力驅(qū)動支持。

SuperTextView 的與眾不同在于,它只是一個簡單的控件元素,但卻不僅僅是一個控件。它生而靈動多變,強大的內(nèi)嵌邏輯,為你持續(xù)提供豐富多彩卻異常簡單的開發(fā)支持。

SuperTextView 將你從復(fù)雜的渲染邏輯中解救出來,一行簡單的 API 接口調(diào)用,炫目的渲染效果即刻呈現(xiàn)。

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

在全新的 v3.2.1 版本中,SuperTextView 再一次重新定義了自己。開發(fā)者,來看看精心為你準(zhǔn)備的驚喜吧!??????

這是... Gif ?

這一次,SuperTextView 為開發(fā)者帶來了強力的 Gif 驅(qū)動支持。

如果在過去,你曾經(jīng)為如何在 Android 平臺上展示一張 Gif 圖而苦惱多日,或是困于一些三方 Gif 庫的性能深淵中迷失方向。那么現(xiàn)在,SuperTextView 將徹底改變這一現(xiàn)狀。

gif_demo1.gif

Gif 圖與 SuperTextView 生而渾然天成,因此,你可以通過最熟悉的、最自然的方式來讓一張 Gif 圖獲得展示。就像你過去展示一張普通圖片那樣簡單。

得益于 c/c++ 的超高性能,以及對內(nèi)存的精確操作。SuperTextView 通過使用 c/c++ 為移動平臺專門定制了性能強悍的 Gif 驅(qū)動引擎。

SuperTextViewGif 引擎,能夠精確操作圖像像素內(nèi)存,在 Gif 圖像的幀刷新時,只對局部像素內(nèi)存進(jìn)行更新,這讓 Gif 圖像渲染效率得到了質(zhì)的飛躍。

通過異步離屏渲染及多緩沖技術(shù),使得 SuperTextView 即使在流暢展示超大 Gif 圖像的時候,依舊能夠保持應(yīng)用界面絲滑的流暢度,以及靈敏的響應(yīng)速度。

gif_demo2.gif

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

展示 Gif 超簡單!

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

你可以直接 XML 布局文檔中配置,或者在代碼中進(jìn)行添加。

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 的內(nèi)核邏輯中,SuperTextView 能夠智能的對普通圖和 Gif 圖進(jìn)行分類,然后作出相應(yīng)的處理和優(yōu)化。

展示網(wǎng)絡(luò) Gif,一樣簡單

如果你的 Gif 圖不在本地,而在云端,怎么辦?

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

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

只需一行代碼,SuperTextView 會在后臺協(xié)助你完成 Gif 圖的加載,然后處理渲染到屏幕上。

??實際上,SuperTextViewDrawable1Drawable2 圖像展示位,均可用來展示 Gif 圖??傊磺卸际悄闼煜さ臉幼?。

你可以掌控的更多

SuperTextView 所提供給開發(fā)者的不僅僅是展示 Gif 圖這么簡單,你可以掌控更多的細(xì)節(jié)。

播放/暫停

你可以隨時控制 Gif 圖,播放,或者暫停。

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

  // 播放
  gifDrawable.play();

  // 暫停
  gifDrawable.stop();
}
gif_demo3.gif

跳轉(zhuǎn)/獲取指定幀

SuperTextView 中,你可以隨時到達(dá)你指定的幀圖像,以及能夠提取到指定幀的圖像。

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

  // 跳轉(zhuǎn)到指定幀
  gifDrawable.gotoFrame(pre);

  // 獲取指定幀
  Bitmap frame = gifDrawable.getFrame(i);
}

??由于 SuperTextView 能夠支持局部增量渲染,所以當(dāng)你的 Gif 圖支持這種渲染模式時,意味著你可能需要通過調(diào)用 gifDrawable.setStrict(true) 開啟 嚴(yán)格模式,來確保幀跳轉(zhuǎn)或者幀提取的圖像是正確的。這可能會花費一些時間,所以你應(yīng)該盡量將 嚴(yán)格模式 下的操作放到異步線程中進(jìn)行。

快慢,隨你心

SuperTextView 允許你隨意的修改 Gif 圖的播放速率。

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

  // 設(shè)置幀播放間隔時間,20ms
  gifDrawable.setFrameDuration(20);
}
gif_demo4.gif

你可以了若指掌

通過 SuperTextView 你可以對一張 Gif 圖像的信息了若指掌。

  • 獲取 Gif 尺寸

    // 獲取寬度
    int width = gifDrawable.getWidth();
    
    // 獲取高度
    int height = gifDrawable.getHeight();
    
  • 獲取 Gif 幀信息

    // 獲取幀數(shù)
    int frameCount = gifDrawable.getFrameCount();
    
    // 獲取當(dāng)前幀間隔
    int frameDuration = gifDrawable.getFrameDuration();
    
    // 獲取當(dāng)前渲染到那一幀
    int framePotision = gifDrawable.getCurrentFrame();
    
    // 是否在播放
    boolean isPlaying = gifDrawable.isPlaying();
    

更出彩的 Gif

SuperTextView 憑借對 Gif 渲染的無縫融合,此前 Drawable1Drawable2 的一切配置項,在展示 Gif 圖時,也同樣能夠生效。

Gif 作為普通 Drawable

app:stv_state_drawable_rotate="90"

來看看在原本的 Drawable 位置放上一張 Gif 圖會發(fā)生什么神奇的事情。

<com.coorchice.library.SuperTextView
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:paddingLeft="62dp"
    android:paddingRight="10dp"
    android:text="小火箭發(fā)射了!啦啦啦啦啦啦..."
    android:textColor="#ffffff"
    android:textSize="22dp"
    app:stv_corner="6dp"
    app:stv_isShowState="true"
    app:stv_solid="#0D1831"

    // 設(shè)置 Gif
    app:stv_state_drawable="@drawable/gif_1"

    // 設(shè)置 Gif 高
    app:stv_state_drawable_height="40dp"

    // 設(shè)置 Gif 寬
    app:stv_state_drawable_width="40dp"

    // 設(shè)置 Gif 居左展示
    app:stv_state_drawable_mode="left"

    // 設(shè)置 Gif 左間距
    app:stv_state_drawable_padding_left="10dp"/>

效果是...

gif_demo5.gif

現(xiàn)在,將 Gif 旋轉(zhuǎn) 90 度試試。

<com.coorchice.library.SuperTextView
    ...
    // 設(shè)置 Gif 旋轉(zhuǎn) 90 度
    app:stv_state_drawable_rotate="90"
    ...
/>
image

將 Gif 圓角化

SuperTextView 不可思議的實現(xiàn)了 Gif 圖的圓角化,為開發(fā)者提供了更多的可能。

image

然而,實現(xiàn)這種效果卻驚人的簡單。

<com.coorchice.library.SuperTextView
    android:layout_width="185dp"
    android:layout_height="138.75dp"
    android:layout_gravity="center_horizontal"
    app:stv_corner="20dp"

    // 設(shè)置 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"

    // 加上文字會顯的更有格調(diào)
    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"

    // 設(shè)置邊框顏色
    app:stv_stroke_color="@color/opacity_8_gray_4c

    // 設(shè)置邊框?qū)挾?    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"/>

效果即刻呈現(xiàn)...

gif_demo8.gif

輕松實現(xiàn)動態(tài)頭像

在過去,一些炫酷的動效,往往會止步于實現(xiàn)的復(fù)雜度和成本。而 SuperTextView 為你帶了更多的可能,你的靈感可以無拘無束。

比如,動態(tài)頭像的實現(xiàn),可能是迄今為止最簡單的。

<com.coorchice.library.SuperTextView
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_marginLeft="30dp"
    app:stv_corner="40dp"

    // 設(shè)置為背景圖
    app:stv_drawableAsBackground="true"

    // 配置 Gif 頭像
    app:stv_state_drawable="@drawable/gif_avatar"

    // 添加邊框
    app:stv_stroke_color="#ffffff"
    app:stv_stroke_width="3dp"
    />

在代碼中,你可以直接配置一張網(wǎng)絡(luò)動態(tài)頭像。

stv.setUrlImage("http://gif_avatar.gif");
gif_demo9.gif

更多的驚喜

兩個 Drawable 都支持點擊!

在新版本的 SuperTextView 中,Drawable1Drawable2 被賦予了全新的能力 —— 支持精確的響應(yīng)點擊動作。

image

SuperTextView 通過監(jiān)控點擊動作發(fā)生的位置,能夠準(zhǔn)確的定位到其所發(fā)生的區(qū)域(Drawable1、Drawable2 或者 其它區(qū)域),然后觸發(fā)相應(yīng)的回調(diào)監(jiān)聽。

你可以為 SuperTextView 設(shè)置 Drawable 上的點擊動作監(jiān)聽器,以便在動作發(fā)生時,作出必要的響應(yīng)。

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 區(qū)域被點擊,do something...
    }
});

背景圖縮放模式支持

現(xiàn)在,當(dāng)你將 Drawable1 作為背景圖時,你可以為它配置不同的縮放模式,以達(dá)到你心儀的效果。

stv.setScaleType(ScaleType.CENTER);

SuperTextView 為開發(fā)者提供了多達(dá) 3 種縮放模式:

  • ScaleType.FIT_XY

    將圖片拉伸/壓縮平鋪。

  • ScaleType.FIT_CENTER

    將圖片自適應(yīng)居中。

  • ScaleType.CENTER

    將圖片剪裁居中。默認(rèn)值。

image

其它更新

  • XML 布局文檔中,Drawable1Drawable2 現(xiàn)在支持直接設(shè)置 顏色 或者 ShapeDrawable。

    // circle_f9ad36 為 xml 中編寫的 shape 文件
    app:stv_state_drawable="@drawable/circle_f9ad36"
    
    // 使用純色作為 Drawable
    app:stv_state_drawable="#000000"
    
  • ?? 最低支持版本 API 提升到 19

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

  • 升級默認(rèn)圖片加載引擎,支持智能緩存。也許現(xiàn)在,你不必再引入第三方圖片加載庫了。

??隨著 5G 帶來更快的網(wǎng)速,以及設(shè)備性能越來越強悍,用戶界面會越來越需要更多的動態(tài)展示(過去大量的靜態(tài)用戶界面實在是太死氣沉沉了)來刺激使用者的感官,激發(fā)用戶的興趣。而 SuperTextView 能夠幫助開發(fā)者輕松的完成即將到來的這一過渡轉(zhuǎn)變。

如何開始 SuperTextView v3.2.1 ?

在項目 build.gradle 中加入:

dependencies {
    ...

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

    ...
}

傳送門區(qū)域


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計師,開發(fā)人員,需求研究和測試都會影響到一個app最后的UI展示,所有人都很樂于去建議app應(yīng)該怎么去展示UI。...
    瑜小賢閱讀 1,265評論 0 3
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,621評論 1 32
  • 湘潭春水滿,岸遠(yuǎn)草青青。 有客釣煙月,無人論醉醒。 門前蛟蜃氣,蓑上蕙蘭馨。 曾受蒙莊子,逍遙一卷經(jīng)。
    江南莫之閱讀 433評論 4 8
  • 我沒有見過大海, 但我知道大海的存在。 我不知道你的名字, 但我知道你從哪里來。 我沒有去過東京, 但我知道東京的...
    紀(jì)云汐閱讀 360評論 2 6
  • 關(guān)于讀寫鎖,是一種改進(jìn)的排他鎖,也被稱為共享排他鎖,一次只允許一個線程對共享變量進(jìn)行更新。允許多個線程同時讀取共享...
    先生zeng閱讀 446評論 0 1

友情鏈接更多精彩內(nèi)容