Android動態設置Shape
有過一些開發經驗的朋友,在做圓角按鈕的背景時可能不再需要.9的切圖了,而一般都是在drawable文件夾下面建立一個xml文件shape(其他狀態不變色)或者selector(按下、選中狀態變色),但是如果我們想在應用中動態的改變控件的顏色怎么辦?.
比如說這種需求,看圖
一些標簽類型的控件,數據都是從后臺獲取得到,當然也包括顏色值。在沒有選中的情況下邊框顏色和字體顏色一樣背景白色,選中后背景變色,字體變白色。這樣的動態修改控件的顏色怎么做?下面為大家介紹下GradientDrawable
官方對它的介紹是這樣的
Android.graphics.drawable
類 GradientDrawable
java.lang.Object
繼承者 android.graphics.drawable.Drawable
繼承者 android.graphics.drawable.GradientDrawable
public class GradientDrawable extends Drawable
A Drawable with a color gradient for buttons, backgrounds, etc.
通常可以用作Button或是背景圖形的
Drawable It can be defined in an XML file with the shape element.
可以在xml里面shape元素下定義的 (沒有了,只有這兩行。。。)
但是進入源碼我們可以了解到,
繪制圖形的種類有:LINE,OVAL,RECTANGLE或是RING
圖形的其它屬性有:Radius,startColor,centerColor,endColor,angle,centerX,centerY, Stroke_width,Stroke_color,Solid_color,Padding
由此我們大概的知道,該類能做到的事情有哪些了。它就相當于一個可以動態設置的shape,我們實例化一個出來后,再指定某些屬性,最后讓控件setBackground就可以了,很簡單。
TextView textView = new TextView(this);
GradientDrawable drawable = new GradientDrawable();
drawable.setCornerRadius(5);
drawable.setStroke(1, Color.parseColor("#cccccc"));
drawable.setColor(Color.parseColor("#eeeeee"));
textView.setBackgroundDrawable(drawable);
如果說要實現按下時(android:state_pressed)的狀態,可以實現控件的setOnTouchListener,在MotionEvent.ACTION_DOWN事件下再設置你想要實現的背景給控件就好了。
來自:http://www.jianshu.com/p/2467444d2664