Drawable

1.BitmapDrawable

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"

        <!--圖片的資源 -->
        android:src="@drawable/create"
        <!--是否抗鋸齒-->
        android:antialias="true"
        <!--是否開(kāi)啟抖動(dòng)效果-->
        android:dither="true"
        <!--開(kāi)啟過(guò)濾效果-->
        android:filter="true"
        <!--圖片大小和容器不符合時(shí)圖片擺放位置嚼松,拉伸哲银,裁剪-->
        android:gravity="
        <!--圖片大小不發(fā)生變化-->
        top|bottom|left|right
        |center_vertical|center_horizontal|center
        <!--圖片大小發(fā)生變化-->
        |fill_vertical|fill_horizontal|fill
        |clip_vertical|clip_horizontal"
        <!--紋理映射,圖像處理技術(shù),一般用不到-->
        android:mipMap="false"
        <!--平鋪模式,開(kāi)啟此屬性gravity會(huì)失效
       disabled 關(guān)閉
       clamp 圖片四周像素會(huì)擴(kuò)散到周?chē)鷧^(qū)域
       repeat 簡(jiǎn)單的水平和豎直方向重復(fù)圖片
       mirror 圖片倒立重復(fù)圖片
        -->
        android:tileMode=" ["disabled"|"clamp"|"repeat"|"mirror"]"
    >

</bitmap>

2.NinePatchDrawable

點(diǎn)9圖可以自動(dòng)根據(jù)所需的寬高進(jìn)行相應(yīng)的縮放并保證不失真

屬性基本和BitmapDrawable相同

<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/create"
    >

</nine-patch>

3.ShapeDrawable

在代碼中生成的是GradientDrawable對(duì)象

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    <!--圖形 可以是rectangle(矩形)
                   oval(橢圓)
                   line(線)
                   ring(圓環(huán))
    -->
    android:shape=""
    <!--以下是圓環(huán)特有屬性
    圓環(huán)內(nèi)徑-->
    android:innerRadius="@dimen/activity_horizontal_margin"
    
    <!--內(nèi)徑所占整個(gè)Drawable的比例 默認(rèn)為9,如果為n,那么內(nèi)半徑=寬度/n,以innerRadius為主-->
    android:innerRadiusRatio="1"
    <!--圓環(huán)厚度-->
    android:thickness="@dimen/activity_horizontal_margin"
    <!--厚度所占整個(gè)Drawable的比例 默認(rèn)為3槽奕,如果為n,那么厚度=寬度/n,以thickness為主-->
    android:thicknessRatio="1"
    <!--除非用于LevelListDrawable一般為false-->
     android:useLevel="false"
 
    >
    
    <!--Drawable的內(nèi)在寬高-->
    <size android:height="@dimen/activity_horizontal_margin"
          android:width="@dimen/activity_horizontal_margin"/>
    <!--包含這個(gè)Drawable的View的空白-->
    <padding
        android:top="@dimen/activity_horizontal_margin"
        android:bottom="@dimen/activity_horizontal_margin"
        android:left="@dimen/activity_horizontal_margin"
        android:right="@dimen/activity_horizontal_margin"
        />
    <!--適用于rectangle四個(gè)角的圓角半徑-->
    <corners
        android:radius="@dimen/activity_horizontal_margin"
        android:topLeftRadius="@dimen/activity_horizontal_margin"
        android:topRightRadius="@dimen/activity_horizontal_margin"
        android:bottomRightRadius="@dimen/activity_horizontal_margin"
        android:bottomLeftRadius="@dimen/activity_horizontal_margin"
        />
    <!--顏色填充使用純色-->
    
     <solid android:color="@color/colorAccent"/>
     <!--顏色填充使用漸變色-->
    <gradient
    <!--漸變類(lèi)型
    linear 線性漸變(默認(rèn))
    radial  徑向漸變
    sweep  掃描線漸變
    -->
        android:type=""
        
        <!-- 漸變的角度默認(rèn)為0房轿,其值必須為45的倍數(shù)
        0代表從左到右
        90代表從下到上-->
        android:angle="0"
        <!--漸變中心點(diǎn)坐標(biāo)-->
        android:centerX="1"
        android:centerY="1"
        
        android:startColor="@color/colorAccent"
        android:centerColor="@color/colorAccent"
        android:endColor="@color/colorAccent "
        <!--漸變半徑 僅當(dāng)type等于radial有效-->
        android:gradientRadius="1"
         <!--除非用于LevelListDrawable一般為false-->
        android:useLevel="false"
        />
   
   <!--描邊-->
    <stroke
        <!--描邊寬度-->
        android:width="@dimen/activity_horizontal_margin"
        <!--描邊顏色-->
        android:color="@color/colorAccent"
        <!--設(shè)置為虛線描邊寬度與dashGap同時(shí)使用才能生效-->
        android:dashWidth="@dimen/activity_horizontal_margin"
        <!--描邊虛線間隔空隙-->
        android:dashGap="@dimen/activity_horizontal_margin"
        />
</shape>

4.LayerDrawable

一種不同層次的Drawable的集合粤攒,放置不同層面而達(dá)到疊加后的效果,一個(gè)layer-list可包含多個(gè)item
默認(rèn)情況下囱持,layer-list中所有的View都會(huì)被縮放至View的大泻唤印(對(duì)于bitmap可通過(guò)android:gravity控制圖片顯示效果),下面的item會(huì)覆蓋上面的item。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">


    <item 
            <!--可引用一個(gè)drawable資源-->
          android:drawable="@drawable/drawable_bitmap"
          <!--drawable相對(duì)于View的偏移量-->
          android:top="@dimen/activity_horizontal_margin"
          android:bottom="@dimen/activity_horizontal_margin"
          android:left="@dimen/activity_horizontal_margin"
          android:right="@dimen/activity_horizontal_margin"
        >
    <item>
        <shape android:shape="rectangle"
            >
            <solid android:color="#0ac39e"/>
        </shape>
    </item>
    <item android:bottom="6dp">
        <shape android:shape="rectangle"
            >
            <solid android:color="#ffffff"/>
        </shape>
    </item>
    <item android:bottom="1dp"
          android:left="1dp"
          android:right="1dp"

        >
        <shape android:shape="rectangle"
            >
            <solid android:color="#ffffff"/>
        </shape>
    </item>
</layer-list>

5.StateListDrawable

不同狀態(tài)選擇不同drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"

         <!--StateListDrawable固有大小是否隨著drawable的切換而發(fā)生變化為true不發(fā)生變化纷妆,為item中drawable最大的固有大小 默認(rèn)為false-->
          android:constantSize="true"
          <!--是否開(kāi)啟防抖效果-->
          android:dither="true"
          <!--StateListDrawable的padding是否隨著drawable的切換而發(fā)生變化盔几,為false不變是所有item中drawable padding的最大值,默認(rèn)為false-->
          android:variablePadding="true"
    >
    <item android:drawable="@drawable/create" android:state_pressed="true"/>
    <item android:drawable="@drawable/create" android:state_focused="true" />
    <item android:drawable="@drawable/create" android:state_checked="true" />
    <!--默認(rèn)-->
    <item android:drawable="@drawable/create" />
 
</selector>

6.LevelListDrawable

Drawable的集合掩幢,每個(gè)Drawable都可設(shè)置最小level和最大level逊拍,View的背景可通過(guò)getBackground().setLevel()設(shè)置不同了Level匹配不同的Drawable
ImageView的話可通過(guò)setIamgeLevel()匹配不同的Drawable

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/create"
            android:minLevel="0"
            android:maxLevel="0"
        >
    </item>
    <item android:drawable="@drawable/b_now" android:maxLevel="1"/>
    <item android:drawable="@drawable/tap_launch" android:maxLevel="2"/>
    <item android:drawable="@drawable/uilib" android:maxLevel="3"/>


</level-list>


7.TransitionDrawable

只能實(shí)現(xiàn)兩個(gè)Drawable的淡入淡出效果
默認(rèn)顯示item1

 TransitionDrawable drawable= (TransitionDrawable) mIvLevel.getBackground();
        if (!mBoolean)
        {

            //從item1淡出,item2淡入
            drawable.startTransition(1000);
            mBoolean=true;
        }
        else
        {
            //反轉(zhuǎn)
            drawable.reverseTransition(1000);
            mBoolean=false;
        }
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/b_now"
          android:top="@dimen/activity_horizontal_margin"
          android:bottom="@dimen/activity_horizontal_margin"
          android:left="@dimen/activity_horizontal_margin"
          android:right="@dimen/activity_horizontal_margin"

        ></item>
    <item android:drawable="@drawable/create"></item>
</transition>

8.InsetDrawable

把Drawable內(nèi)嵌到自己當(dāng)中

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:drawable="@drawable/create"
       android:insetBottom="@dimen/activity_horizontal_margin"
       android:insetLeft="@dimen/activity_horizontal_margin"
       android:insetRight="@dimen/activity_horizontal_margin"
       android:insetTop="@dimen/activity_horizontal_margin"
    >
    <shape android:shape="rectangle">
        <solid android:color="@color/colorAccent"></solid>
    </shape>
</inset>

9.ScaleDrawable

適合縮小一個(gè)特定的drawable

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/create"
        <!--縮放寬高比例越大 Drawable顯示越小-->
       android:scaleWidth="1%"
       android:scaleHeight="50%"
       android:scaleGravity="center"
       <!--level取值0到10000 為0不顯示际邻,level越大Drawable顯示越大-->
       android:level="1"
    >
</scale>

10.ClipDrawable

裁剪Drawable 由clipOrientation和gravity共同決定裁剪位置

ClipDrawable clipDrawable= (ClipDrawable)
mIvLevel.getDrawable();
//level取值0到10000,取值越大裁剪越少 0完全裁剪芯丧,10000表示不裁剪
clipDrawable.setLevel(5000);
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
      android:drawable="@drawable/create"
      <!--裁剪的方向-->
      android:clipOrientation="vertical"
      android:gravity="center"
      
    >
</clip>

自定義Drawable

public class CustomDrawable extends Drawable {
    
    private Paint mPaint;

    public CustomDrawable(int  color) {
        mPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setColor(color);
    }

    @Override
    public void draw(Canvas canvas) {
        final Rect rect=getBounds();
        float cx=rect.exactCenterX();
        float cy=rect.exactCenterY();
        canvas.drawCircle(cx,cy,Math.min(cx,cy),mPaint);
    }

    @Override
    public void setAlpha(int alpha) {
        mPaint.setAlpha(alpha);
        invalidateSelf();

    }

    @Override
    public void setColorFilter(ColorFilter colorFilter) {

        mPaint.setColorFilter(colorFilter);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }
}

圓形Drawable

public class CircleImageDrawable extends Drawable {

    private Paint mPaint;
    private int mWidth;
    private Bitmap mBitmap ;

    public CircleImageDrawable(Bitmap bitmap)
    {
        mBitmap = bitmap ;
        BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
                Shader.TileMode.CLAMP);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(bitmapShader);
        mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight());
    }

    @Override
    public void draw(Canvas canvas)
    {
        canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint);
    }

    @Override
    public int getIntrinsicWidth()
    {
        return mWidth;
    }

    @Override
    public int getIntrinsicHeight()
    {
        return mWidth;
    }

    @Override
    public void setAlpha(int alpha)
    {
        mPaint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf)
    {
        mPaint.setColorFilter(cf);
    }

    @Override
    public int getOpacity()
    {
        return PixelFormat.TRANSLUCENT;
    }
}

圓角矩形Drawable

public class RoundImageDrawable extends Drawable {
    private Paint mPaint;
    private Bitmap mBitmap;

    private RectF rectF;

    public RoundImageDrawable(Bitmap bitmap)
    {
        mBitmap = bitmap;
        BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
                Shader.TileMode.CLAMP);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(bitmapShader);
    }

    @Override
    public void setBounds(int left, int top, int right, int bottom)
    {
        super.setBounds(left, top, right, bottom);
        rectF = new RectF(left, top, right, bottom);
    }

    @Override
    public void draw(Canvas canvas)
    {
        canvas.drawRoundRect(rectF, 30, 30, mPaint);
    }

    @Override
    public int getIntrinsicWidth()
    {
        return mBitmap.getWidth();
    }

    @Override
    public int getIntrinsicHeight()
    {
        return mBitmap.getHeight();
    }

    @Override
    public void setAlpha(int alpha)
    {
        mPaint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf)
    {
        mPaint.setColorFilter(cf);
    }

    @Override
    public int getOpacity()
    {
        return PixelFormat.TRANSLUCENT;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市枯怖,隨后出現(xiàn)的幾起案子注整,更是在濱河造成了極大的恐慌,老刑警劉巖度硝,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肿轨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蕊程,警方通過(guò)查閱死者的電腦和手機(jī)椒袍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)藻茂,“玉大人驹暑,你說(shuō)我怎么就攤上這事”娲停” “怎么了优俘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掀序。 經(jīng)常有香客問(wèn)我帆焕,道長(zhǎng),這世上最難降的妖魔是什么不恭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任叶雹,我火速辦了婚禮财饥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘折晦。我一直安慰自己钥星,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布满着。 她就那樣靜靜地躺著谦炒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漓滔。 梳的紋絲不亂的頭發(fā)上编饺,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天乖篷,我揣著相機(jī)與錄音响驴,去河邊找鬼。 笑死撕蔼,一個(gè)胖子當(dāng)著我的面吹牛豁鲤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鲸沮,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼琳骡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了讼溺?” 一聲冷哼從身側(cè)響起楣号,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怒坯,沒(méi)想到半個(gè)月后炫狱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剔猿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年视译,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片归敬。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酷含,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汪茧,到底是詐尸還是另有隱情椅亚,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布舱污,位于F島的核電站呀舔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏慌闭。R本人自食惡果不足惜别威,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一躯舔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧省古,春花似錦粥庄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至琳拭,卻和暖如春训堆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背白嘁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工坑鱼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人絮缅。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓鲁沥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親耕魄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子画恰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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

  • 1、Drawable 簡(jiǎn)介 Drawable——可簡(jiǎn)單理解為可繪制物吸奴,表示一些可以繪制在 Canvas 上的對(duì)象允扇。...
    牧秦丶閱讀 14,740評(píng)論 0 15
  • 轉(zhuǎn)載自Keegan小鋼并標(biāo)明原文鏈接:http://keeganlee.me/post/android/20150...
    堅(jiān)持編程_lyz閱讀 1,117評(píng)論 0 1
  • 一、 Drawable簡(jiǎn)介 1 Drawable表示的是一種可以在Canvas上進(jìn)行繪制的抽象的概念则奥,可以是純顏色...
    黃海佳閱讀 1,205評(píng)論 0 10
  • Drawable簡(jiǎn)介 提到Drawable考润,第一反應(yīng)肯定是存放圖片的位置,實(shí)際上逞度,Drawable并不僅僅指圖片额划。...
    Cris_Ma閱讀 2,859評(píng)論 0 0
  • (外地出差)本文手機(jī)整理,排版有些亂档泽,望見(jiàn)諒俊戳。 文章摘要:——為節(jié)省您的時(shí)間,閱讀下面【235字】的摘要即可了解本...
    石頭聊家庭教育閱讀 797評(píng)論 0 3