Drawable
16lz
2021-01-23
1.BitmapDrawable
<?xml version="1.0" encoding="utf-8"?> 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相同
<?xml version="1.0" encoding="utf-8"?>
3.ShapeDrawable
在代码中生成的是GradientDrawable对象
<?xml version="1.0" encoding="utf-8"?> 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。
<?xml version="1.0" encoding="utf-8"?> - 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
<?xml version="1.0" encoding="utf-8"?> android:constantSize="true" android:dither="true" android:variablePadding="true" >
6.LevelListDrawable
Drawable的集合,每个Drawable都可设置最小level和最大level,View的背景可通过getBackground().setLevel()设置不同了Level匹配不同的Drawable
ImageView的话可通过setIamgeLevel()匹配不同的Drawable
<?xml version="1.0" encoding="utf-8"?> -
7.TransitionDrawable
只能实现两个Drawable的淡入淡出效果
默认显示item1
TransitionDrawable drawable= (TransitionDrawable) mIvLevel.getBackground(); if (!mBoolean) { //从item1淡出,item2淡入 drawable.startTransition(1000); mBoolean=true; } else { //反转 drawable.reverseTransition(1000); mBoolean=false; }
<?xml version="1.0" encoding="utf-8"?>
8.InsetDrawable
把Drawable内嵌到自己当中
<?xml version="1.0" encoding="utf-8"?>
9.ScaleDrawable
适合缩小一个特定的drawable
<?xml version="1.0" encoding="utf-8"?> 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);
<?xml version="1.0" encoding="utf-8"?> 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; }}
更多相关文章
- 图片加载的几种模式
- ImageView下载图片加载
- Android中TextView中加图片,超链接,部分字或者背景变色。。。
- Android:解决RadioGroup中RadioButton的图片自定义及每项间隔距离
- TextView 文字加图片显示效果
- Android常用控件六之图片框(ImageView)
- Android Imageview 图片居左居右,自定义圆角
- android 加载图片到gallery
- Android 图片倒影和setXfermode