Drawable

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;
    }
}

你可能感兴趣的:(Drawable)