Drawable分類

Drawable分類

1.BitmapDrawable

一般開發中直接引用圖片即可,但也可以通過XML的方式來描述它,可以設置更多的效果。

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:gravity="center"
    android:mipMap="true"
    android:filter="true"
    android:src="@drawable/ic_launcher"
    android:tileMode="disabled" >

</bitmap>   

android:antialias
是否開啓抗鋸齒。開啓使圖片變得平滑。
android:dither
是否開啓抖動效果。讓高質量的圖片在低質量的屏幕上還能保持較好的顯示效果。
android:filter
是否開啓過濾效果。圖片尺寸被拉伸或壓縮時,可以保持較好的顯示效果。
android:mipMap(mipMap在API18以上)
紋理映射。圖像相關的處理技術,不常用。
android:tileMode
平鋪模式。[“disabled”|”clamp”|”repeat”|”mirror”],disabled:關閉平鋪模式,開啓平鋪後android:gravity屬性會被忽略。repeat:水平和豎直方向的平鋪,mirror:水平和豎直方向鏡面投影效果,clamp:圖片四周的圖像會擴展到周圍區域。
這裏寫圖片描述 repeat
這裏寫圖片描述 mirror

NinePathDrawable

表示一張.9圖。

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

</nine-patch>

ShapeDrawable

通過顏色來構造圖形,即可是純色,也可是漸變效果。

LayerDrawable

對應xml標籤是,表示一種層次化的Drawable集合。

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

    <!-- 連框顏色值 -->
    <item
        android:bottom="0dp"
        android:left="0dp"
        android:right="1dp"
        android:top="0dp">
        <shape>
            <corners android:radius="3dp" />
            <gradient
                android:angle="270"
                android:endColor="#FFFFFF"
                android:startColor="#EEEEEE" />
        </shape>
    </item>
    <!-- 主體背景顏色值 -->
    <item
        android:bottom="0dp"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp">
        <shape>
            <corners android:radius="3dp" />
            <stroke
                android:width="1dp"
                android:color="#E8E9E9" />
        </shape>
    </item>

</layer-list>

StateListDrawable

對應標籤

LeverListDrawable

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/garland_gray"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/garland_yellow"
        android:maxLevel="1" />
    <item
        android:drawable="@drawable/garland_blue"
        android:maxLevel="2" />
</level-list>

通過下邊代碼設置選中對應等級的Drawable。

imageView.getDrawable().setLevel(1);

TransitionDrawable

對應標籤。用於實現兩個Drawable之間的淡入淡出效果

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

    <item android:drawable="@drawable/edge_green"/>
    <item android:drawable="@drawable/edge_purple"/>

</transition>

通過下邊代碼設置


        TransitionDrawable drawable = (TransitionDrawable) tv.getBackground();
        drawable.startTransition(5000);//開啓效果
        drawable.reverseTransition(5000);//逆過程

InsetDrawable

對應標籤

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="15dp"
    android:insetLeft="15dp"
    android:insetRight="15dp"
    android:insetTop="15dp" >

    <shape android:shape="rectangle" >
        <solid android:color="#ff0000" />
    </shape>

</inset>

ScaleDrawable

對應標籤,可以根據自己的等級(level)將指定的Drawable縮放到一定比例。

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_launcher"
    android:scaleGravity="center"
    android:scaleHeight="25%"
    android:scaleWidth="25%" >

</scale>

但是直接使用上面的Drawable資源是不行的,必須設置ScaleDrawable的等級0-10000之間的值,如下:

ScaleDrawable scaleDrawable = (ScaleDrawable) view.getBackground();
        scaleDrawable.setLevel(1);

ClipDrawable

對應標籤,根據自己當前等級來裁剪另一個Drawable。

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="vertical"
    android:drawable="@drawable/ic_launcher"
    android:gravity="bottom" >

</clip>

裁剪方向通過android:clipOrientation和android:gravity共同控制。上邊表示從上往下豎直裁剪。


ClipDrawable clipDrawable=(ClipDrawable) iv.getDrawable();
clipDrawable.setLevel(5000);

level從0-10000,0表示完全裁剪,10000表示不裁剪,5000表示裁剪一半。

自定義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) {
        Rect r = getBounds();
        float cX = r.exactCenterX();
        float cY = r.exactCenterY();
        canvas.drawCircle(cX, cY, Math.min(cX, cY), mPaint);

    }

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

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

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

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章