你好, SuperTextView

【SuperTextView english document】
點擊此處蚊夫,查看《SuperTextView 開發(fā)參考文檔》
點擊此處,查看詳細的《SuperTextView API文檔》

<img src="https://raw.githubusercontent.com/chenBingX/img/master/stv/SuperTextViewyuan.png" width=230 height=230 align=right alt="SuperTextView">

一直以來 SuperTextView 的使命懦尝,就是幫助 Android 開發(fā)者得心應手的構建 Android 應用知纷。

SuperTextView 是一個高效的、全能的陵霉、優(yōu)雅的 Android 控件琅轧。通過 SuperTextView ,你可以快速實現(xiàn)圓角背景踊挠,設置漸變色背景乍桂,給控件和文字描邊冲杀,為控件增加狀態(tài)圖,添加按壓時文字或背景變色效果睹酌,通過 Adjuster 模塊快速插入操作到控件繪制過程中权谁,展示圖片,甚至可以直接從網(wǎng)絡上下載圖片展示...基本上涵蓋了 Android 日常開發(fā)中會用到的絕大部分效果憋沿。而實現(xiàn)這一切的代價旺芽,僅僅是給 SuperTextView 設置一個屬性。SuperTextView 可以幫助開發(fā)者高效辐啄、便捷采章、優(yōu)雅的完成 Android 應用的開發(fā)。

image

近期更新

v3.1.1 - 誠意之作壶辜,SuperTextView

SuperTextView 被打造來幫助 Android 開發(fā)者更高效悯舟、更便捷、更優(yōu)雅的開發(fā) Android 應用砸民。

現(xiàn)在抵怎,這一誠意之作再次升級。全新的 SuperTextView 將向 Android 開發(fā)者開放更多可能性阱洪,當然一如既往便贵,SuperTextView 也帶來了更多高效的功能。

神奇的著色

image

SuperTextView 此次的升級冗荸,為 StateDrawable 增加了神奇而強大的著色能力承璃。開發(fā)者可以輕松的改變一個圖標的顏色,而不用再增加一個僅僅是顏色不同的圖標到項目中蚌本。這項技術將為你的 Android 應用程序帶來一次瘦身的機遇盔粹。

# 修改 drawable 的顏色
app:stv_state_drawable_tint="@color/gray"

# 修改 drawable2 的顏色
app:stv_state_drawable2_tint="@color/red"

只需要如此一行簡單的代碼,就能瞬間賦予一張圖片千變?nèi)f化的能力程癌。想要任何色彩舷嗡,當然是你說了算。而這一切的發(fā)生嵌莉,無需再引進另外一張圖片进萄。

在 Java 代碼中,有與之對應 set/get 函數(shù)锐峭,讓開發(fā)者可以在任何時候都能施展魔法中鼠,改變一張圖片的色彩。

七十二般變化

對 StateDrawable 的增強沿癞,不僅僅限于顏色的變換援雇。SuperTextView 更被賦予了改變 StateDrawable 形態(tài)的能力。同樣的一張圖椎扬,開發(fā)者可以組合出無數(shù)種可能惫搏。

image

只需簡單的幾行代碼具温,你便可以隨心所欲的變換任何一張圖片。

# 修改 drawable 的旋轉角度
app:stv_state_drawable_rotate="90"

# 修改 drawable2 的旋轉角度
app:stv_state_drawable2_rotate="90"

無需復雜的代碼筐赔,SuperTextView 一如既往的簡潔铣猩、優(yōu)雅。

同樣川陆,在 Java 代碼中剂习,也提供了對應的 set/get 函數(shù)。

這項能力较沪,可以有效的幫助開發(fā)者將 Android 應用的體積向著極致的方向壓縮鳞绕。

精彩遠不止于此

image

這就是漸變文字!

SuperTextView 所提供的可能是目前為止實現(xiàn)漸變文字最簡潔尸曼、優(yōu)雅的解決方案们何。只需要簡單的配置,就能實現(xiàn)酷炫的漸變文字效果控轿。

# 是否啟用漸變色文字
app:stv_textShaderEnable="true"

# 設置文字的起始漸變色
app:stv_textShaderStartColor="@color/red"

# 設置文字的結束漸變色
app:stv_textShaderEndColor="@color/yellow"

# 設置文字的漸變的模式
# leftToRight:左 -> 右
# rightToLeft:右 -> 左
# topToBottom:上 -> 下
# bottomToTop:下 -> 上
app:stv_textShaderMode="leftToRight"

這些屬性也在 Java 中開放了 set/get 接口冤竹,便于開發(fā)者隨時動態(tài)的修改它們。

開放了新的 API

1. Adjuster 增加 onAttach茬射、onDetach

Adjuster 增加了兩個新的函數(shù):

  • onAttach():當 Adjuster 被設置到一個 SuperTextView 中時會被調用鹦蠕。
  • onDetach():當 Adjuster 被從一個 SuperTextView 中移除時會被調用。

通過在 Adjuster 中重寫這兩個函數(shù)在抛,開發(fā)者可以在正確的時機進行狀態(tài)注冊钟病、初始化,或者取消注冊刚梭、釋放資源等操作肠阱。

public class MyAdjuster extends SuperTextView.Adjuster{

    @Override
    protected void adjust(SuperTextView superTextView, Canvas canvas) {
      
    }

    @Override
    public void onAttach(SuperTextView stv) {
      // 當 Adjuster 被加入一個 SuperTextView 時會被調用
    }

    @Override
    public void onDetach(SuperTextView stv) {
      // 當 Adjuster 被從 SuperTextView 移除時會被調用
    }
}

2. 提供 getAdjusterList() 函數(shù)

這個函數(shù)可以讓開發(fā)者獲得一個 SuperTextView 中的所有 Adjuster。如果 SuperTextView 中沒有 Adjuster 的話朴读,將會返回 null屹徘。

?? 你必須重視這些變化

1. 屬性增加了 stv_ 前綴

現(xiàn)在,SuperTextView 的所有屬性都加上了前綴 stv_衅金。

這樣做可以避免當開發(fā)者引入的其它第三方庫時噪伊,與 SuperTextView 可能產(chǎn)生的屬性名沖突。

如果開發(fā)者目前正在使用一個此前版本的 SuperTextView氮唯,那么當升級到新的版本后酥宴,需要在所有 xml 中的屬性前加上 stv_ 前綴。

得益于現(xiàn)代 IDE 的強大您觉,開發(fā)者可以輕松的完成這些工作。就像下面這樣授滓。

app:corner="10dp"

corner 是舊版本中的屬性名稱琳水,升級到新版本后肆糕,需要在前面增加 stv_ 前綴,變?yōu)?stv_corner在孝。

image

如果開發(fā)者使用的是 AndroidStudio诚啃,從 Edit > Find > Replace 打開批量替換對話框,然后按照下圖操作即可私沮。

image

如果開發(fā)者的項目中只有 SuperTextView 使用了相同的命名空間(如 app)始赎,那么很幸運,你可以直接將 app: 替換為 app:stv_ 即可仔燕。

2. setAdjuster(Adjuster) 已被移除

從 SuperTextView v2.0 版本開始造垛,setAdjuster(Adjuster) 函數(shù)就被標記為了將被移除的狀態(tài),同時加入了新的函數(shù) addAdjuster(Adjuster) 作為替代晰搀。

在新的版本中五辽,setAdjuster(Adjuster) 函數(shù)將被正式移除,如果開發(fā)者此前使用了該方法外恕,請將其修改為 addAdjuster(Adjuster)杆逗。

如何開始 SuperTextView v3.1.1

dependencies {
     compile 'com.github.chenBingX:SuperTextView:v3.1.1'
}

v3.0 - 你期待已久的 SuperTextView

經(jīng)過一年多的不斷的聆聽、思考鳞疲、探索罪郊、驗證, SuperTextView 完成了多次迭代尚洽,改善了一些問題悔橄,新增了一些功能,不斷的完善翎朱,以帶給開發(fā)者更好的開發(fā)體驗橄维。

如今, SuperTextView 已經(jīng)具備了諸如圓角拴曲、邊框争舞、描邊、按壓變色澈灼、多狀態(tài)圖竞川、圓角圖、萬能的 Adjuster 叁熔、加載網(wǎng)絡圖片等一系列的常用功能委乌。得益于此,開發(fā)者能夠輕松實現(xiàn)各種原本十分麻煩的效果荣回,節(jié)省大量的開發(fā)時間遭贸,有效減少頁面的復雜度,降低項目維護成本心软。

寫代碼壕吹,本應如此愉悅著蛙!

1. 鏈接云端的 SuperTextView

早在幾個月前,就開始有很多開發(fā)者向 CoorChice 建議耳贬,是否能夠讓 SuperTextView 具備加載網(wǎng)絡圖片的功能踏堡。其實這也是 CoorChice 很久之前就有考慮過的,但在 SuperTextView 的早期咒劲,完善其核心功能仍然是首要目標顷蟆,所以一直沒涉獵到圖片相關的功能。

直到上一個大版本腐魂,SuperTextView v2.0帐偎,CoorChie 才嘗試添加了圖片展示的功能。這使得SuperTextView 可使用的范圍得到了擴大挤渔,同時針對圖片也推出了給圖片增加描邊肮街、設置圓角、設置狀態(tài)圖等功能判导。相關使用文檔可到以下鏈接查閱:

【你好嫉父, SuperTextView】 - http://www.reibang.com/p/1b91e11e441d

這一次嘗試,獲得了開發(fā)者們不錯的反響眼刃,大家對于使用 SuperTextView 去展示處理圖片是有所期待的绕辖。上一個版本發(fā)布后,開發(fā)者們對于一個能展示網(wǎng)絡圖片的 SuperTextView 似乎更加的感興趣了擂红。

那么仪际,現(xiàn)在,你所期待已久的 SuperTextView 在此昵骤!

image

1.1 加載一張網(wǎng)絡圖片

顯示一張網(wǎng)絡圖片树碱,在 SuperTextView 中只需要如下代碼:

SuperTextView stv_1 = (SuperTextView) findViewById(R.id.stv_1);
//填入圖片Url
stv_1.setUrlImage(url);

效果就如上圖中的第二個顯示頭像的例子一樣。

如果你希望將網(wǎng)絡圖片作為 SuperTextView 的 StateDrawable 來展示的話变秦,完全沒問題成榜。

//填入圖片Url
stv_1.setUrlImage(url, false);

第二個參數(shù)為 false 表示網(wǎng)絡圖片將不會被作為背景充滿整個 SuperTextView,而是作為一個狀態(tài)圖蹦玫。當然赎婚,有關狀態(tài)圖的一切配置都將運用到此。就像上圖中的第一個例子一樣樱溉,整個布局包括圖片挣输、文字、背景都在一個 SuperTextView 中被處理福贞,從網(wǎng)絡下載的圖片被作為 StateDrawable 放到了圖中的位置撩嚼。

1.2 SuperTextView 中圖片引擎

SuperTextView 為了保持依賴庫的純凈和盡可能小的體積,并沒有內(nèi)置任何的圖片加載框架。所以默認情況绢馍,將使用內(nèi)置的一個簡易圖片引擎去下載圖片向瓷,確保開發(fā)者能夠正常使用展示網(wǎng)絡圖片的功能。

CoorChice 仍然建議開發(fā)者根據(jù)項目的具體情況舰涌,選擇一個目前正在使用的圖片加載框架,設置到 SuperTextView 中你稚,以用來加載圖片瓷耙。 SuperTextView 具備適配任意圖片加載框架的能力。下面 CoorChice 將通過 Glide 和 Picasso 的例子展示如何將現(xiàn)有的圖片框架安裝到 SuperTextView 中刁赖。

1.2.1 實現(xiàn)圖片引擎 Engine

SuperTextView 中搁痛,核心的圖片加載引擎被抽象成接口 Engine ,開發(fā)者需要根據(jù)所用的圖片框架宇弛,實現(xiàn)一個 Engine鸡典。

  • Glide圖片加載框架
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);
        }
        });
    }
}
  • Picasso圖片加載框架
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) {

        }
    });
  }
}
1.2.2 安裝圖片引擎 Engine

實現(xiàn)好 Engine 后,下一步就是要將其安裝到 SuperTextView 中枪芒。

CoorChice 建議可以在 Application的onCreate()中進行安裝彻况,這樣當需要使用 SuperTextView 加載顯示網(wǎng)絡圖片的時候,就能夠用到三方圖片框架了舅踪。

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 實例货徙。

現(xiàn)在左权,你可以讓 SuperTextView 使用指定的三方圖片加載框架去加載圖片了。

image

2. 如何開始 SuperTextView v3.0

    dependencies {
       compile 'com.github.chenBingX:SuperTextView:v3.0.0'
    }

3. 其它

  • 修復一個動畫問題
  • 一些優(yōu)化

v2.0 - 未來痴颊,從現(xiàn)在開始

一直以來赏迟,CoorChice都心存一個設想,期待著能夠打造這樣一個控件:它能滿足你的大部分開發(fā)需求祷舀,展示文字瀑梗、圖片、幾何裳扯、動畫抛丽、狀態(tài),讓你使用一個控件就能高效的完成大部分開發(fā)工作饰豺。它是如此的強大亿鲜,仿佛有心智一般,接受著你的輸入,按照你的心意蒿柳,呈現(xiàn)出嘆為觀止的畫面饶套。隨著【SuperTextView v2.0】的到來,我們離這個設想更近了一步±萏剑現(xiàn)在妓蛮,來和【SuperTextView v2.0】見個面吧!

image

圖片圾叼,就是現(xiàn)在

在【SuperTextView v2.0】中蛤克,增加了對圖片展示的支持。但不僅僅止于展示圖片夷蚊,它還能智能的根據(jù)你的輸入將圖片剪裁為你期望的形狀构挤。

image

給圖片加上圓角,加上邊框惕鼓,或者直接變成圓形筋现,所有的一切只需要設置幾個簡單的屬性箱歧,即刻呈現(xiàn)在你的眼前。

展示一張圖片

如何使用SuperTextView展示一張圖片输钩?只需要在xml中加上下面兩句代碼即可。

<com.coorchice.library.SuperTextView
    ...
    app:state_drawable="@drawable/avatar1"
    app:drawableAsBackground="true"
    ...
 />

如果你是SuperTextView的忠實用戶的話,你會發(fā)現(xiàn),原本的state_drawable現(xiàn)在可以被用來展示一張圖片。

給圖片加上圓角

現(xiàn)在,你的圖片呈現(xiàn)在了你的眼前,也許你還想對它做一些不一樣的事情,比如,加個圓角戈抄,或者直接變成圓形薪寓?沒問題嗦董,SuperTextView現(xiàn)在完全能勝任這樣的工作匹摇。

<com.coorchice.library.SuperTextView
    android:layout_width="100dp"
    android:layout_height="100dp"
    ...
    app:corner="15dp"
    app:state_drawable="@drawable/avatar1"
    app:drawableAsBackground="true"
    ...
 />

如此簡單!在原來的基礎上你僅僅需要設置合理的corner值就行。

也許涕蚤,你還想要邊框

有時候休溶,你可能需要使用一個邊框去包裹住你的圖片孽尽,就像上面的示例那樣。沒錯,這肯定在SuperTextView能力范圍內(nèi)乖寒。

<com.coorchice.library.SuperTextView
    android:layout_width="100dp"
    android:layout_height="100dp"
    ...
    app:corner="50dp"
    app:stroke_color="#F4E187"
    app:stroke_width="4dp"
    app:state_drawable="@drawable/avatar1"
    app:drawableAsBackground="true"
    ...
 />

app:stroke_color 掌控著邊框的顏色谆膳,app:stroke_width 掌控著邊框的寬度嗤军。一切如此流暢浪慌,一個有心智的控件本該如此冤荆,對嗎?

第二個狀態(tài)圖

面對復雜的需求變化权纤,【SuperTextView】為應對這種復雜性钓简,孕育出了第二個狀態(tài)圖 state_drawable2

image

現(xiàn)在汹想,CoorChice將向你展示外邓,上圖中的兩種效果是如何實現(xiàn)的。

  • 示例一
<com.coorchice.library.SuperTextView
    android:layout_width="100dp"
    android:layout_height="100dp"
    ...
    app:corner="50dp"
    app:state_drawable="@drawable/avatar1"
    app:drawableAsBackground="true"
    // state_drawable2的配置由此開始
    app:isShowState2="true"
    app:state_drawable2="@drawable/recousers"
    app:state_drawable2_mode="rightTop"
    app:state_drawable2_height="20dp"
    app:state_drawable2_width="20dp"
    ...
 />
  • 示例二
<com.coorchice.library.SuperTextView
    android:layout_width="100dp"
    android:layout_height="100dp"
    ...
    // 背景圖
    android:background="@drawable/avatar7"
    // drawable1的配置由此開始
    app:isShowState="true"
    app:state_drawable="@drawable/triangle"
    app:state_drawable_mode="leftTop"
    app:state_drawable_width="20dp"
    app:state_drawable_height="20dp"
    // state_drawable2的配置由此開始
    app:isShowState2="true"
    app:state_drawable2="@drawable/recousers"
    app:state_drawable2_mode="rightTop"
    app:state_drawable2_height="20dp"
    app:state_drawable2_width="20dp"
    ...
 />

就如你所熟悉的一樣古掏,state_drawable2 延續(xù)了第一代一切流暢的操作损话。在聰明的你合理的使用下,【SuperTextView】一定能夠大放異彩槽唾!??

屬于 Adjuster 的時代

此前丧枪,Adjuster 的設計使得【SuperTextView】具有了靈魂,成為更聰明的控件庞萍。對繪制過程的插入拧烦,觸摸事件的捕捉,使得你能輕松的從外部改變一個控件的狀態(tài)钝计。創(chuàng)意始于心恋博,而行于此齐佳。

現(xiàn)在,【SuperTextView】能夠同時承載最多3個 Adjuster 债沮!也許炼吴,你的創(chuàng)意會更加的炫目。

image

在上面這個示例中秦士,CoorChice將早起的兩個【掃光】和【漣漪】特效都加入到了一個【SuperTextView】中缺厉,結果就是你看到的這樣。

更多的 Adjuster 意味著更多的組合隧土,更多的驚喜提针。在【v1.4.0】中,CoorChice同樣使用了 Adjuster 來輕松的實現(xiàn)了按壓變色功能曹傀。

這是 Adjuster 的時代辐脖,睿智的你一定可以運用它揮灑創(chuàng)意的。

需要注意的是??皆愉,原本的 setAdjuster(Adjuster) 方法目前仍然被保留嗜价,但以后的版本將會被移除,你必須要盡快遷移幕庐。新的替代方法為 addAdjuster(Adjuster) 久锥。

其它

  • 修正控制Shader模式的屬性 app:shaderMode="leftToRight" 的拼寫。原來為 app:shaderMode="leftTopRight" 异剥。如果你使用了該屬性瑟由,在升級【SuperTextView v2.0】后請及時修正。
  • 增加 set/getPressBgColor()set/getPressTextColor() 用于在代碼中控制按壓背景色冤寿。

v1.4.0

  • 千呼萬喚使出來歹苦!你想要的按壓變色效果在這里!
image

只需在xml文件中設置以下兩個屬性就能輕松實現(xiàn)按壓變色效果督怜,例如上圖那樣的:

# 設置按壓時的背景色
app:pressBgColor="@color/red"
# 設置按壓時的文字顏色
app:pressTextColor="@color/white"

這個功能是依托內(nèi)置一個Adjuster實現(xiàn)的殴瘦,你可以看看這

CoorChice想說的是号杠,AdjusterSuperTextView的靈魂所在蚪腋,它能夠讓一切創(chuàng)意變成可能。

  • 暴露一個新的方法getCorners()姨蟋。你可以通過它獲得SuperTextView的所有圓角信息辣吃,有時候你真的很需要它。
  • 如何使用SuperTextView v1.4芬探?
dependencies {
    compile 'com.github.chenBingX:SuperTextView:v1.4'
}

v1.3

  • 支持隨時修改動畫幀率神得。難以置信的是,你甚至可以在動畫執(zhí)行過程中隨時修改偷仿!當然最好不要這么做哩簿。
mSuperTextView.setFrameRate(30);
// 修改幀率為30幀
  • 優(yōu)化動畫驅動的性能宵蕉。
  • 酷炫不止,漸變來襲节榜!
image

一觸即變羡玛,想象不至于此。藝術家宗苍,發(fā)揮你的創(chuàng)造力吧稼稿!

同樣,漸變效果的設置支持在xml中設置讳窟,并且能夠即時預覽让歼。

app:shaderEnable="true"
// 必須設置為true才能啟用漸變功能。這意味著你可以靈活的控制這一功能丽啡。

app:shaderStartColor="@color/main_blue"
// 設置起始顏色谋右。

app:shaderEndColor="@color/pink"
// 設置結尾顏色。

app:shaderMode="rightToLeft"
// 設置漸變模式补箍。如上圖可見改执,一共支持4中模式:
// topTopBottom, bottomToTop, leftToRight, rightToLeft

當然,這些屬性也都提供了對應的set/get方法坑雅,供你在Java中動態(tài)改變/獲取它們的值辈挂。比如:

mSuperTextView.setShaderStartColor(Color.RED);
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    compile 'com.github.chenBingX:SuperTextView:v1.3'
}

v1.1

  • 最低支持Android 4.0呢岗,SdkVersion 14。
  • 支持優(yōu)雅動人的 【鏈式表達式】 , eg:
mSuperTextView.setAdjuster(new MoveEffectAdjuster())
        .setAutoAdjust(true)
        .startAnim();
  • 減小占用空間蛹尝。

簡介

歡迎使用SuperTextView,這篇文檔將會向你展示如何使用這個控件來提高你構建項目的效率悉尾。

image

SuperTextView繼承自TextView突那,它能夠大量的減少布局的復雜程度,并且使得一些常見的效果變得十分容易實現(xiàn)且高效构眯。同時愕难,它內(nèi)置了動畫驅動,你只需要合理編寫Adjuster惫霸,然后startAnim()就可以看到預期的動畫效果猫缭。它僅僅是一個控件,所以你可以不費吹灰之力的在你的項目中集成使用壹店。

特點

  1. 你從此不必再為背景圖編寫和管理大量<shape>文件了猜丹。
  2. 重新優(yōu)化的狀態(tài)圖功能使得你能夠精確的控制狀態(tài)圖的大小,以及在SuperTextView中的位置硅卢。
  3. 支持設置圓角射窒,并且能夠精確的控制圓角位置藏杖。
  4. 能夠輕松的實現(xiàn)控件邊框效果。
  5. 支持文字描邊脉顿,這使得空心文字效果成為了可能蝌麸。
  6. 內(nèi)置動畫驅動,你只需配合Adjuster合理的使用即可艾疟。
  7. Adjuster的出現(xiàn)来吩,使得你對控件的繪制過程具有了掌控權,良好的設計使得它能夠完美的實現(xiàn)絕大部分你腦海中的效果蔽莱。

使用指南

支持的屬性

SuperTextView十分方便的支持在xml中直接設置屬性弟疆,并且你能夠立即看到效果。就像你平時使用TextView一樣方便碾褂。

<SuperTextView
    android:layout_width="50dp"
    android:layout_height="50dp"

    //設置圓角兽间。會同時作用于填充和邊框(如果邊框存在的話)。
    //如果要設置為圓形正塌,只需要把該值設置為寬或長的1/2即可嘀略。
    app:corner="25dp"
    //設置左上角圓角
    app:left_top_corner="true"
    //設置右上角圓角
    app:right_top_corner="true"
    //設置左下角圓角
    app:left_bottom_corner="true"
    //設置右下角圓角
    app:right_bottom_corner="true"
    //設置填充顏色
    app:solid="@color/red"
    //設置邊框顏色
    app:stroke_color="@color/black"
    //設置邊框的寬度。
    app:stroke_width="2dp"
    //放置一個drawable在背景層上乓诽。默認居中顯示帜羊。
    //并且默認大小為SuperTextView的一半。
    app:state_drawable="@drawable/emoji"
    //設置drawable的顯示模式鸠天∷嫌可選值如下:
    // left、top稠集、right奶段、bottom、center(默認值)剥纷、
    //leftTop痹籍、rightTop、leftBottom晦鞋、rightBottom蹲缠、
    //fill(充滿整個SuperTextView,此時會使設置drawable的大小失效)
    app:state_drawable_mode="center"
    //設置drawable的height
    app:state_drawable_height="30dp"
    //設置drawable的width
    app:state_drawable_width="30dp"
    //設置drawble相對于基礎位置左邊的距離
    app:state_drawable_padding_left="10dp"
    //設置drawble相對于基礎位置上邊的距離
    app:state_drawable_padding_top="10dp"
    // boolean類型悠垛。是否顯示drawable线定。
    //如果你想要設置的drawable顯示出來,必須設置為true确买。
    //當不想讓它顯示時斤讥,再設置為false即可。
    app:isShowState="true"
    //是否開啟文字描邊功能湾趾。
    //注意周偎,啟用這個模式之后通過setTextColor()設置的顏色將會被覆蓋抹剩。
    //你需要通過text_fill_color來設置文字的顏色。
    app:text_stroke="true"
    // 文字的描邊顏色蓉坎。默認為Color.BLACK澳眷。
    app:text_stroke_color="@color/black"
    // 文字描邊的寬度。
    app:text_stroke_width="1dp"
    // 文字填充的顏色蛉艾。默認為Color.BLACK钳踊。
    app:text_fill_color="@color/blue"
    // boolean類型。是否啟用Adjuster功能勿侯。
    //具體干什么拓瞪,需要在Java中為SuperTextView實現(xiàn)一個Adjuster。
    //當你啟用這個功能而沒有實現(xiàn)自己的Adjuster時助琐,
    //SuperTextView會啟用默認的Adjuster祭埂。它會按照一定的規(guī)則調整文字大小。
    app:autoAdjust="true"
    />

以上這些屬性兵钮,均可以在Java中進行動態(tài)的設置蛆橡。同時也能夠獲得它們的值。例如:

mSuperTextView.setCorner(10);
mSuperTextView.getCorner();

圓形和邊框

image

為了實現(xiàn)上圖效果掘譬,通常你需要編寫和管理大量的<shape>文件√┭荩現(xiàn)在你只需要在xml或代碼中對SuperTextView直接進行設置即可。

不簡單的圓角

image

不同于簡單的圓角葱轩,SuperTextView支持精確的控制圓角的位置睦焕。一個、兩個靴拱、三個都沒問題垃喊。一切由你掌控。

神奇的文字描邊

image

文字描邊從未如此簡單袜炕!

高效的狀態(tài)圖

image

不同于原生的Drawable本谜,SuperTextView對于Drawable提供了更多精細化的控制操作。你能夠輕松的指定Drawable大小以及位置妇蛀,只需一個屬性就能搞定。

相信你一定深有感觸笤成,想要實現(xiàn)上圖中的效果评架,往往需要嵌套多層布局(一般3層吧?)炕泳。而SuperTextView只需一個控件纵诞,并且十分簡單高效的就能實現(xiàn)。它能夠大量的減少你的App中的布局復雜程度培遵,減少視圖樹的繪制時間浙芙。

炸裂的 Adjuster

Adjuster被設計用來在SuperTextView的繪制過程中插入一些操作登刺。這具有非常重要的意義。比如嗡呼,默認實現(xiàn)的DefaultAdjuster能夠動態(tài)的調整文字的大小纸俭。當然,你可以用它來實現(xiàn)各種各樣的效果南窗。

想要Adjuster生效揍很,你必須調用SuperTextView.setAutoAdjust(true)來啟用Adjuster功能。當然万伤,你可以所以方便的停止窒悔,通過調用SuperTextView.setAutoAdjust(false)。并且敌买,你需要注意調用順序简珠,因為一旦調用了SuperTextView.setAutoAdjust(true),而Adjuster沒有被設置的話虹钮,將會啟用默認的DefaultAdjuster(它能夠動態(tài)的調整文字大小)聋庵,直到你設置了你自己的Adjuster

干預控件的繪制

實現(xiàn)一個Adjuster需要繼承SuperTextView.Adjuster,并且實現(xiàn)adjust(SuperTextView v, Canvas canvas)方法芜抒。Adjuster.adjust()會在每次繪制過程中被調用珍策,這意味著你能夠不可思議的從外部干預控件的繪制過程。

public class YourAdjuster extends SuperTextView.Adjuster {

  @Override
  protected void adjust(SuperTextView v, Canvas canvas) {
    //do your business宅倒。
  }

}

注意攘宙,如果開啟動畫,你必須十分謹慎的編寫adjuster()中的代碼拐迁。因為動畫會以60幀/每秒的速度進行繪制蹭劈。這意味著,這個方法每秒會被調用60次线召!所以铺韧,千萬不要在這個方法中重復的創(chuàng)建對象,會卡爆的缓淹!原因是短時間的大量將會引起【內(nèi)存抖動】哈打,導致GC頻繁發(fā)生。相關知識你可以看看我的這兩篇文章:

響應觸摸事件

如果你重載Adjuster的onTouch(SuperTextView v, MotionEvent event)方法料仗,你將能夠獲得SuperTextView的觸摸事件。這是重要的一點伏蚊,如果你想持續(xù)的對SuperTextView的觸摸事件進行處理立轧,你必須使onTouch()返回true。否則你只能接收到一個ACTION_DOWN事件,而不是一個事件流氛改。

public class YourAdjuster extends SuperTextView.Adjuster {

  @Override
  protected void adjust(SuperTextView v, Canvas canvas) {
    //do your business帐萎。
  }

  @Override
  public boolean onTouch(SuperTextView v, MotionEvent event) {
    //you can get the touch event.
    //If want to get a series of touch event, you must return true here.
  }

}

如此驚艷的效果

得益于SuperTextView內(nèi)置的動畫驅動,你能夠結合Adjuster來實現(xiàn)難以置信的動畫效果胜卤。一切只需要在你合理的編寫好Adjuster后疆导,調用startAnim()stopAnim()來啟動/停止動畫。

image

如你所見瑰艘,上面的效果就是通過Adjuster來實現(xiàn)的是鬼。并且這種拔插式的設計,使得你能夠隨時在同一個SuperTextView上使用新的Adjuster紫新,你所有需要做的事情就是創(chuàng)建一個新的Adjuster均蜜,然后調用setAdjuster()

之前@Alex_Cin希望看到Ripple漣漪效果芒率,所以在RippleAdjuster.java中囤耳,我演示了如何使用Adjuster和動畫驅動配合實現(xiàn)上圖的Rippler漣漪效果。【RippleAdjuster.java鏈接:https://github.com/chenBingX/SuperTextView/blob/master/app/src/main/java/com/coorchice/supertextview/SuperTextView/Adjuster/RippleAdjuster.java】

看偶芍,你可以使用Adjuster實現(xiàn)自己的Ripple效果充择。

指定 Adjuster 的層級

Adjuster貼心的設計了控制作用層級的功能。你可以通過Adjuster.setOpportunity(Opportunity opportunity)來指定Adjuster的繪制層級匪蟀。

SuperTextView中椎麦,繪制層級被從下到上分為:背景層、Drawable層材彪、文字層3個層級观挎。通過Opportunity來指定你的Adjuster想要插入到那個層級間。

public enum Opportunity {
      BEFORE_DRAWABLE, //背景層和Drawable層之間
      BEFORE_TEXT,     //Drawable層和文字層之間
      AT_LAST          //最上層
}

三種類型的Opportunity示意圖段化。

image

默認值是Opportunity.BEFORE_TEXT嘁捷。即第二張圖的示例。

事實上显熏,只要你愿意雄嚣,SuperTextView就相當于一張畫布,你可以在上面任意的揮灑你的創(chuàng)意喘蟆。它能夠讓你專注于創(chuàng)作缓升,而不用去在意編寫那些無用麻煩的代碼。

如何開始使用

在你的build.gradle中加入:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    compile 'com.github.chenBingX:SuperTextView:v3.1.1'
}

現(xiàn)在蕴轨,開始使用 SuperTextView 吧港谊。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膘螟,一起剝皮案震驚了整個濱河市成福,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荆残,老刑警劉巖奴艾,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異内斯,居然都是意外死亡蕴潦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門俘闯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潭苞,“玉大人,你說我怎么就攤上這事真朗〈苏睿” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵遮婶,是天一觀的道長蝗碎。 經(jīng)常有香客問我,道長旗扑,這世上最難降的妖魔是什么蹦骑? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮臀防,結果婚禮上眠菇,老公的妹妹穿的比我還像新娘。我一直安慰自己清钥,他們只是感情好琼锋,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祟昭,像睡著了一般缕坎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篡悟,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天谜叹,我揣著相機與錄音,去河邊找鬼搬葬。 笑死荷腊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的急凰。 我是一名探鬼主播女仰,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疾忍?” 一聲冷哼從身側響起乔外,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎一罩,沒想到半個月后杨幼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡聂渊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年差购,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汉嗽。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡欲逃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饼暑,到底是詐尸還是另有隱情暖夭,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布撵孤,位于F島的核電站迈着,受9級特大地震影響,放射性物質發(fā)生泄漏邪码。R本人自食惡果不足惜裕菠,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闭专。 院中可真熱鬧奴潘,春花似錦、人聲如沸影钉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽平委。三九已至奈虾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廉赔,已是汗流浹背肉微。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜡塌,地道東北人碉纳。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像馏艾,于是被迫代替她去往敵國和親劳曹。 傳聞我的和親對象是個殘疾皇子奴愉,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容