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(); }}
更多相关文章
- 2014-11-6Android学习------Android 仿真翻页效果实现--------贝
- Android仿IOS回弹效果 ScrollView回弹 总结
- Android OpenGLES2.0(十七)——球形天空盒VR效果实现
- android中TextView中如何设置水平滚动效果