1.BitmapDrawable
android:src="@drawable/create"
android:antialias="true"
android:dither="true"
android:filter="true"
android:gravity="
top|bottom|left|right
|center_vertical|center_horizontal|center
|fill_vertical|fill_horizontal|fill
|clip_vertical|clip_horizontal"
android:mipMap="false"
android:tileMode=" ["disabled"|"clamp"|"repeat"|"mirror"]"
>
2.NinePatchDrawable
点9图可以自动根据所需的宽高进行相应的缩放并保证不失真
属性基本和BitmapDrawable相同
3.ShapeDrawable
在代码中生成的是GradientDrawable对象
android:shape=""
android:innerRadius="@dimen/activity_horizontal_margin"
android:innerRadiusRatio="1"
android:thickness="@dimen/activity_horizontal_margin"
android:thicknessRatio="1"
android:useLevel="false"
>
android:type=""
android:angle="0"
android:centerX="1"
android:centerY="1"
android:startColor="@color/colorAccent"
android:centerColor="@color/colorAccent"
android:endColor="@color/colorAccent "
android:gradientRadius="1"
android:useLevel="false"
/>
android:width="@dimen/activity_horizontal_margin"
android:color="@color/colorAccent"
android:dashWidth="@dimen/activity_horizontal_margin"
android:dashGap="@dimen/activity_horizontal_margin"
/>
4.LayerDrawable
一种不同层次的Drawable的集合,放置不同层面而达到叠加后的效果,一个layer-list可包含多个item
默认情况下,layer-list中所有的View都会被缩放至View的大小(对于bitmap可通过android:gravity控制图片显示效果),下面的item会覆盖上面的item。
-
android:drawable="@drawable/drawable_bitmap"
android:top="@dimen/activity_horizontal_margin"
android:bottom="@dimen/activity_horizontal_margin"
android:left="@dimen/activity_horizontal_margin"
android:right="@dimen/activity_horizontal_margin"
>
-
-
-
5.StateListDrawable
不同状态选择不同drawable
android:constantSize="true"
android:dither="true"
android:variablePadding="true"
>
6.LevelListDrawable
Drawable的集合,每个Drawable都可设置最小level和最大level,View的背景可通过getBackground().setLevel()设置不同了Level匹配不同的Drawable
ImageView的话可通过setIamgeLevel()匹配不同的Drawable
-
7.TransitionDrawable
只能实现两个Drawable的淡入淡出效果
默认显示item1
TransitionDrawable drawable= (TransitionDrawable) mIvLevel.getBackground();
if (!mBoolean)
{
//从item1淡出,item2淡入
drawable.startTransition(1000);
mBoolean=true;
}
else
{
//反转
drawable.reverseTransition(1000);
mBoolean=false;
}
8.InsetDrawable
把Drawable内嵌到自己当中
9.ScaleDrawable
适合缩小一个特定的drawable
android:scaleWidth="1%"
android:scaleHeight="50%"
android:scaleGravity="center"
android:level="1"
>
10.ClipDrawable
裁剪Drawable 由clipOrientation和gravity共同决定裁剪位置
ClipDrawable clipDrawable= (ClipDrawable)
mIvLevel.getDrawable();
//level取值0到10000,取值越大裁剪越少 0完全裁剪,10000表示不裁剪
clipDrawable.setLevel(5000);
android:clipOrientation="vertical"
android:gravity="center"
>
自定义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;
}
}