Android Drawable(二)
来源:互联网 发布:男加厚棉服淘宝 编辑:程序博客网 时间:2024/06/05 09:37
概述
之前已经介绍了ShapeDrawable的主要使用方法,今天将主要介绍一些其他的Android定义好的drawable类,如BitmapDrawable、LayerDrawable等。
Drawable官网地址:https://developer.android.com/guide/topics/resources/drawable-resource.html
BitmapDrawable
xml定义
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@[package:]drawable/drawable_resource" android:antialias=["true" | "false"] android:dither=["true" | "false"] android:filter=["true" | "false"] android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | "fill_vertical" | "center_horizontal" | "fill_horizontal" | "center" | "fill" | "clip_vertical" | "clip_horizontal"] android:mipMap=["true" | "false"] android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
属性解释
- andorid:src:指定的图片资源id
- android:antialias:抗锯齿效果,使得图片在显示时显得更加平滑。
- android:dither:抖动效果,当图片的像素和设备的屏幕像素不一样时,在一定程度上减少图片的失真。
- android:filter:滤镜效果,使图片被压缩拉升能够有好的显示效果。
- android:gravity:设置图片的摆放位置。
- android:mipMap:不太明白这个属性的作用
- android:tileMode:平铺模式。默认disable不开启平铺。repeat重复模式;mirror在水平或者竖直方向上实现投影效果;clamp在图片拉升时让图片四周的像素扩展到周围区域
- android:tileModeX和android:tileModeY:作用同android:tileMode,分别指定水平和竖直方向上的平铺模式。
具体使用
<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:antialias="true" android:dither="true" android:filter="true" android:gravity="center" android:src="@drawable/mao1" android:tileMode="mirror" android:tileModeX="repeat" android:tileModeY="mirror"></bitmap>//代码中引用 <ImageView android:layout_width="240dp" android:layout_height="320dp" android:background="@drawable/bitmapdrawable" />
效果如下:
repeat模式:
mirror模式:
clamp模式:
LayerDrawable
LayerDrawable:对应于标签,它实现一种层次化的drawable集合,通过将不同的drawable放在不同的层次上显示一种叠加的效果。默认情况下,中的所有的drawable都会被缩放至View的大小,为了避免这种情况,可以通过使用避免图片的缩放。
xml定义
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@[package:]drawable/drawable_resource" android:id="@[+][package:]id/resource_name" android:top="dimension" android:right="dimension" android:bottom="dimension" android:left="dimension" /></layer-list>
属性解释
- android:left、android:top、android:right、android:bottom:分别表示图片在view上的偏移量
- android:id:表示每个item的id,可以通过该id修改图片的属性
- android:drawable:图片资源
具体使用
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/mao1" android:left="0dp" android:top="0dp" /> <item android:drawable="@drawable/mao2" android:left="30dp" android:top="30dp" /> <item android:drawable="@drawable/mao3" android:left="60dp" android:top="60dp" /></layer-list><?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <bitmap android:gravity="center" android:src="@drawable/mao1" /> </item> <item android:left="30dp" android:top="30dp"> <bitmap android:gravity="center" android:src="@drawable/mao2" /> </item> <item android:left="60dp" android:top="60dp"> <bitmap android:gravity="center" android:src="@drawable/mao3" /> </item></layer-list>
效果图:
LevelListDrawable
LevelListDrawable,对应于标签,它同样表示一个drawable集合,集合中的每个item都会设置一个等级,这样通过设置item的Level,实现显示不同的drawable。每个item都可以设置android:maxLevel和android:minLevel,drawable的等级的方位是0-10000,默认是0。同样在item中,图片同样会被缩放,所以需要使用标签。
xml定义
<?xml version="1.0" encoding="utf-8"?><level-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/drawable_resource" android:maxLevel="integer" android:minLevel="integer" /></level-list>
示例
<?xml version="1.0" encoding="utf-8"?><level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="1"> <bitmap android:gravity="center" android:src="@drawable/score_2" /> </item> <item android:maxLevel="2"> <bitmap android:gravity="center" android:src="@drawable/score_2" /> </item> <item android:maxLevel="3"> <bitmap android:gravity="center" android:src="@drawable/score_2" /> </item> <item android:maxLevel="9" android:minLevel="4"> <bitmap android:gravity="center" android:src="@drawable/score_2" /> </item></level-list>
public void setLevel(View view) { EditText edittest = (EditText) findViewById(R.id.et_level); String trim = edittest.getText().toString().trim(); int i = Integer.parseInt(trim); ImageView imageview = (ImageView) findViewById(R.id.iv_level); LevelListDrawable drawable = (LevelListDrawable) imageview.getDrawable();// drawable.setLevel(i); imageview.setImageLevel(i); }
效果图:
TransitionDrawable
TransitionDrawable,对应于标签,用于实现两个drawable的淡入淡出。通过Drawable的startTransition和reverseTransition方法实现淡入淡出和其逆过程。
xml定义
<?xml version="1.0" encoding="utf-8"?><transitionxmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@[package:]drawable/drawable_resource" android:id="@[+][package:]id/resource_name" android:top="dimension" android:right="dimension" android:bottom="dimension" android:left="dimension" /></transition>
具体示例
<?xml version="1.0" encoding="utf-8"?><transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/d2" /> <item android:drawable="@drawable/d3" /></transition>
/** * TransitionDrawable 淡入淡出 * * @param view */ public void setTransition(View view) { ImageView imageview = (ImageView) findViewById(R.id.iv_transition); TransitionDrawable drawable = (TransitionDrawable) imageview.getDrawable();// drawable.startTransition(1000); drawable.reverseTransition(1000); }
效果图:
InsetDrawable
InsetDrawable,对应标签,主要实现drawable的内嵌,并可以设置drawable的边距。
xml定义
<?xml version="1.0" encoding="utf-8"?><inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/drawable_resource" android:insetTop="dimension" android:insetRight="dimension" android:insetBottom="dimension" android:insetLeft="dimension" />
具体实现
<?xml version="1.0" encoding="utf-8"?><inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/d1" android:insetBottom="40dp" android:insetLeft="10dp" android:insetRight="30dp" android:insetTop="20dp" />
效果图:
ClipDrawable
ClipDrawable,对应于标签,它可以根据自己的Level来裁剪drawable,裁剪方向通过android:clipOrientation和android:gravity两个属性同时决定。drawable的level范围是0-10000,默认是0,表示完全裁剪,10000表示完全不裁剪。
xml定义
<?xml version="1.0" encoding="utf-8"?><clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/drawable_resource" android:clipOrientation=["horizontal" | "vertical"] android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | "fill_vertical" | "center_horizontal" | "fill_horizontal" | "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
示例
<?xml version="1.0" encoding="utf-8"?><clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/d4" android:clipOrientation="horizontal" android:gravity="left" />
/** * LevelListDrawable 设置等级 * * @param view */ public void setClip(View view) { EditText edittest = (EditText) findViewById(R.id.et_level); String trim = edittest.getText().toString().trim(); int i = Integer.parseInt(trim); ImageView imageview = (ImageView) findViewById(R.id.iv_clip); imageview.setImageLevel(i); }
效果图:
ScaleDrawable
ScaleDrawable,对应标签,它可以根据自己的level讲指定的drawable缩放到一定的等级。
注意:
在ScaleDrawable中,drawable的level的等级会影响drawable的缩放。
- level为0,drawable不可见
- levle为10000(>10000),drawable完全显示,无法缩放
- 一般情况下,在使用ScaleDrawable时,会将drawable的level设置成1,这样drawable的缩放就会按照android:scaleHeight和android:scaleWidth属性缩放。
xml定义
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/drawable_resource" android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" | "fill_vertical" | "center_horizontal" | "fill_horizontal" | "center" | "fill" | "clip_vertical" | "clip_horizontal"] android:scaleHeight="percentage" android:scaleWidth="percentage" />
属性解释
- android:scaleGravity:同shape的gravity
- android:scaleHeight和android:scaleWidth:分别表示对指定drawable的高和宽的缩放,百分数。
具体示例
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/d4" android:scaleGravity="center_vertical|center_horizontal" android:scaleHeight="40%" android:scaleWidth="40%" />
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/d4" android:scaleGravity="center_vertical|center_horizontal" android:scaleHeight="70%" android:scaleWidth="70%" />
/** * ScaleDrawable 设置缩放1 * * @param view */ public void setScale1(View view) { EditText mEtLevel = (EditText) findViewById(R.id.et_level); String trim = mEtLevel.getText().toString().trim(); int i = Integer.parseInt(trim); ImageView imageview = (ImageView) findViewById(R.id.iv_scale1); ScaleDrawable drawable = (ScaleDrawable) imageview.getDrawable(); drawable.setLevel(i); } /** * ScaleDrawable 设置缩放1 * * @param view */ public void setScale2(View view) { EditText mEtLevel = (EditText) findViewById(R.id.et_level); String trim = mEtLevel.getText().toString().trim(); int i = Integer.parseInt(trim); ImageView imageview = (ImageView) findViewById(R.id.iv_scale2); ScaleDrawable drawable = (ScaleDrawable) imageview.getDrawable(); drawable.setLevel(i); }
效果图:
StateListDrawable
StateListDrawable即选择器,对于这个大家都比较熟悉了,这里不做介绍
xml定义
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize=["true" | "false"] android:dither=["true" | "false"] android:variablePadding=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource" android:state_pressed=["true" | "false"] android:state_focused=["true" | "false"] android:state_hovered=["true" | "false"] android:state_selected=["true" | "false"] android:state_checkable=["true" | "false"] android:state_checked=["true" | "false"] android:state_enabled=["true" | "false"] android:state_activated=["true" | "false"] android:state_window_focused=["true" | "false"] /></selector>
NinePatchDrawable
NinePatchDrawable即.9格式图片,在使用上和普通图片一样,在这里不做介绍。
xml定义
<?xml version="1.0" encoding="utf-8"?><nine-patch xmlns:android="http://schemas.android.com/apk/res/android" android:src="@[package:]drawable/drawable_resource" android:dither=["true" | "false"] />
- Android Drawable(二)
- android 中的Drawable<二>
- android.graphics(二)drawable
- 领略千变万化的Android Drawable (二)
- Android资源之Drawable介绍(二)
- Android 应用资源(二) drawable state
- Android Animation 动画(二)--Drawable动画
- android.graphics.drawable.Drawable
- android drawable Transition Drawable
- Android drawable
- Android Drawable
- android drawable
- Android Drawable
- Android Drawable
- Android Drawable
- android drawable
- Android Drawable
- android drawable
- 代理模式
- zigbee协议栈学习(四)
- CSDN-markdown编辑器语法——字体、字号与颜色
- 装饰者模式
- 【微信小程序+ES6新特性应用】使用箭头操作符简化回调函数繁琐的编写过程
- Android Drawable(二)
- Robust Neural Network for Novelty Detection on Data Streams
- swift 循环 for while
- angularjs input ng-model 双向绑定无效的问题
- 守护进程及初始化守护进程
- 利用Detours对程序进行劫持
- nginx的使用-负载均衡(2)
- 线段树处理 poj2892 hdu1540
- 调试Android程序,不使用模拟器,无需数据线真机调试的方法