当前位置: 首页 > 编程日记 > 正文

Android Drawable 详解(教你画画!)

参考

1、Android中的Drawable基础与自定义Drawable
2、android中的drawable资源
3、Android开发之Shape详细解读

Drawable分类

Noxml标签Class类含义
1shapeShapeDrawable特定形状,模型的图样
2selectorStateListDrawable不同状态选择不同的图样
3layer-listLayerDrawable层叠图样
4level-listLevelListDrawable不同程度图样
5transitionTransitionDrawable渐变图样
6rippleRippleDrawable波纹图样
7insetInsetDrawable内嵌图样
8scaleScaleDrawable缩放图样
9clipClipDrawable剪切图样
10rotateRotateDrawable旋转图样
11animation-listAnimationDrawable动画效果
12bitmapBitmapDrawable图片图样
13nine-patchNinePatchDrawable.9图

\color{green}{=======================================}

一、shape - ShapeDrawable : 特定形状,模型的图样

>>标签含义

1、shape标签
属性含义值等解释
shape形状,样式rectangle: 矩形,默认的形状,可以画出直角矩形、圆角矩形、弧形等
oval: 椭圆形,用得比较多的是画正圆
line: 线形,可以画实线和虚线
ring: 环形,可以画环形进度条
tint着色给shape着色
tintMode着色模式着色模式(有关tint和tintMode请参看文章:http://blog.csdn.net/u010687392/article/details/47399719)
dither抖动平滑:建议true将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。
visible--
useLevel使用等级,建议为false如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示。
thickness外环厚度环的厚度,指内环与外环的环间距。(只适用于shape为ring)
thicknessRatio同上,浮点型浮点型,以环的宽度比率来表示环的厚度,默认为9,表示环的厚度为环的宽度除以9,该值会被android:thickness覆盖(只适用于shape为ring)
innerRatio内环半径内环半径(只适用于shape为ring)
innerRadiusRatio同上,浮点型浮点型,以环的宽度比率来表示内环的半径,默认为3,表示内环半径为环的宽度除以3,该值会被android:innerRadius覆盖(只适用于shape为ring)
2、shape下size标签:设置shape宽高值

注意事项:只有控件宽高设置成wrap_content时,此处宽高才起作用,但是起到的却是最小宽高值。也就是说,当控件宽高超过你此处指定的值时,它会变化(wrap_content!!!)

属性含义
width宽度
height高度
3、shape下solid标签:设置形状填充颜色
属性含义
color指定颜色
4、shape下padding标签:设置内容与边界的距离
属性含义
left左内边距
top上内边距
right右内边距
bottom左内边距
5、shape下corners标签:设置四个角的圆角
属性含义
radius四个角圆角
topLeftRadius左上角的圆角
topRightRadius右上角的圆角
bottomLeftRadius左下角的圆角
bottomRightRadius右下角的圆角
6、shape下stroke标签:设置shape的外边界线
属性含义
color描边的颜色
width边界线的宽度
dashWidth段虚线的宽度
dashGap段虚线的间隔
7、shape下的gradient标签:设置形状渐变
属性含义值等解释
type渐变的类型1.linear:线性渐变,默认的渐变类型
2.radial:放射渐变,设置该项时,必须设置android:gradientRadius渐变半径属
3.sweep:扫描性渐变
angle渐变角度渐变的角度,线性渐变时(linear也是默认的渐变类型)才有效,必须是45的倍数,0表示从左到右,90表示从下到上
centerX渐变中心的相对X坐标放射渐变时(radial)才有效,在0.0到1.0之间,默认为0.5,表示在正中间
centerY渐变中心的相对Y坐标放射渐变时(radial才有效,在0.0到1.0之间,默认为0.5,表示在正中间
useLevel使用等级如果为true,则可在LevelListDrawable中使用。这通常应为“false”,否则形状不会显示
startColor渐变开始的颜色-
centerColor渐变中间的颜色-
endColor渐变结束的颜色-
gradientRadius渐变半径渐变的半径,只有渐变类型为radial时才使用

>>案例

1、Rectangle-矩形样式
shape-rectangle.png

矩形:填充+描边+弧边

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle" > <!-- 填充颜色 --> <solid android:color="@color/wx_green" /> <!-- 线的宽度 --> <stroke android:width="5dp" android:color="@color/orchid"/> <!-- 矩形的圆角半径 --> <corners android:radius="12dp" /> </shape> 

矩形:填充+描边+上部弧边

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 填充颜色 --> <solid android:color="@color/wx_green" /> <!-- 线的宽度 --> <stroke android:width="5dp" android:color="@color/orchid"/> <!-- 矩形的圆角半径,设置四个角 --> <corners android:topLeftRadius="12dp" android:topRightRadius="12dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/> </shape> 

矩形:填充+描边虚线+弧边半圆

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 填充颜色 --> <solid android:color="@color/wx_green" /> <!-- 线的宽度,虚线宽度,虚线间隔 --> <stroke android:width="5dp" android:color="@color/orchid" android:dashWidth="5dp" android:dashGap="3dp"/> <!-- 矩形的圆角半径,半圆形,设置大一点就好了 --> <corners android:radius="100dp" /> </shape> 
2、Oval-图圆形样式
shape-oval.png

椭圆形+横向渐变色,没有调整角度

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <!--渐变色:线性--> <gradient android:type="linear" android:angle="0" android:startColor="@color/wx_red" android:centerColor="@color/wx_green" android:endColor="@color/yellow"/> </shape> 

椭圆形:圆形+发射形渐变色,如果设置的高宽大于gradientRadius*2的话,那么外围颜色是endColor

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!--渐变色:放射,必须设置android:gradientRadius 如果设置的高宽大于gradientRadius*2的话,那么外围颜色是endColor--> <gradient android:type="radial" android:startColor="@color/white" android:endColor="@color/wx_green" android:gradientRadius="60dp"/> </shape> 

椭圆形:圆形+扫描渐变色

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!--渐变色:放射,必须设置android:gradientRadius--> <gradient android:type="sweep" android:startColor="@color/wx_green" android:endColor="@color/white" android:gradientRadius="20dp"/> </shape> 
3、Ring-环形样式
shape-ring.png

环形:只有填充色,inner内部没颜色,外环是填充色

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="40dp" android:thickness="10dp" android:useLevel="false"> <solid android:color="@color/wx_green"/> </shape> 

环形:有填充颜色和描边

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="40dp" android:thickness="10dp" android:useLevel="false"> <solid android:color="@color/wx_green"/> <!-- 线的宽度 --> <stroke android:width="5dp" android:color="@color/orchid"/> </shape> 

环形:sweep的渐变色环,加上rotate可以变成loading框

<?xml version="1.0" encoding="utf-8"?> <!--加上rotate可以变成loading等待框或者进度框--> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="40dp" android:thickness="10dp" android:useLevel="false"> <gradient android:endColor="@color/wx_green" android:startColor="@color/white" android:type="sweep" /> </shape> 

\color{red}{1.ring的话放在view中最好算一下尺寸,就是(内环+外环+线)*2=尺寸 }
\color{red}{ 2.android:useLevel="false" 需要加上去,不然显示不出来}

4、Line-线形样式
shape-line.png

线形:实线,只能是横向的,另外可以设置size

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="3dp" android:color="@color/orchid"/> </shape> 

线性:虚线,如果要显示的话,必须加上android:layerType="software"

<?xml version="1.0" encoding="utf-8"?> <!--要显示虚线必须view加上:android:layerType="software"--> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="3dp" android:color="@color/orchid" android:dashWidth="5dp" android:dashGap="3dp"/> </shape> 

\color{green}{=======================================}

二、selector - StateListDrawable:不同状态选择不同的图样

>>标签含义

1、selector下的item标签

1.1.作为drawable资源使用时,一般和shape一样放于drawable目录下,item必须指定android:drawable属性。
1.2.作为color资源使用时,则放于color目录下,item必须指定android:color属性。

属性含义
drawablecolor颜色或者其他drawable或图片等
state_enabled设置触摸或点击事件是否可用状态**,一般只在false时设置该属性,表示不可用状态
state_pressed设置是否按压状态**,一般在true时设置该属性,表示已按压状态,默认为false
state_selected设置是否选中状态**,true表示已选中,false表示未选中
state_checked设置是否勾选状态**,主要用于CheckBox和RadioButton,true表示已被勾选,false表示未被勾选
state_checkable设置勾选是否可用状态**,类似state_enabled,只是state_enabled会影响触摸或点击事件,state_checkable影响勾选事件
state_focused设置是否获得焦点状态**,true表示获得焦点,默认为false,表示未获得焦点
state_window_focused设置当前窗口是否获得焦点状态**,true表示获得焦点,false表示未获得焦点,例如拉下通知栏或弹出对话框时, 当前界面就会失去焦点;另外,ListView的ListItem获得焦点时也会触发true状态,可以理解为当前窗口就是ListItem本身
state_activated设置是否被激活状态**,true表示被激活,false表示未激活,API Level 11及以上才支持,可通过代码调用控件的setActivated(boolean)方法设置是否激活该控件
state_hovered设置是否鼠标在上面滑动的状态**,true表示鼠标在上面滑动,默认为false,API Level 14及以上才支持
exitFadeDuration状态改变时,旧状态消失时的淡出时间,以毫秒为单位
enterFadeDuration状态改变时,新状态展示时的淡入时间,以毫秒为单位

>>案例

1、下面就用两个button一个checkbox来说明吧
1.button不能按,checkbox不能选中
2.button可以按并按中,checkbox选中了
3.又再次关闭使用,button2是1的优化版,还带有弧角
2、代码部分

\color{red}{注意item不能直接用color不然异常,得用drawable }
2.1.button

<selector xmlns:android="http://schemas.android.com/apk/res/android"><!--异常:tag requires a 'drawable' attribute or child tag defining a drawable 可用drawable下的shape中添加color颜色值--> <!--<item android:state_enabled="false" android:color="@color/gray_5"/>--> <!--不可用--> <item android:state_enabled="false" android:drawable="@color/gray_5"/> <!--未按压--> <item android:state_enabled="true" android:state_pressed="false" android:drawable="@color/green" /> <!--光标在--> <item android:state_enabled="true" android:state_focused="true" android:drawable="@color/lightgreen" /> <!--按压--> <item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/orange" /> </selector> 

2.2.checkbox

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!--不可用,未选中--> <item android:state_enabled="false" android:state_checked="false" android:drawable="@mipmap/un_check_gray"/> <!--不可用,选中--> <item android:state_enabled="false" android:state_checked="true" android:drawable="@mipmap/is_check_gray"/> <!--可用,未选中--> <item android:state_enabled="true" android:state_checked="false" android:drawable="@mipmap/un_check_purl"/> <!--可用,选中--> <item android:state_enabled="true" android:state_checked="true" android:drawable="@mipmap/is_check_purl"/> </selector> 

2.3.button2

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false"> <shape android:shape="rectangle"> <!-- 填充颜色 --> <solid android:color="?attr/colorPrimary"></solid> <!-- 线的宽度,颜色灰色 --> <stroke android:width="0dp" android:color="#D5D5D5"></stroke> <!-- 矩形的圆角半径 --> <corners android:radius="6dip" /> </shape> </item> <item android:state_focused="true"> <shape android:shape="rectangle"> <!-- 填充颜色 --> <solid android:color="?attr/colorPrimary"></solid> <!-- 线的宽度,颜色灰色 --> <stroke android:width="0dp" android:color="#D5D5D5"></stroke> <!-- 矩形的圆角半径 --> <corners android:radius="6dip" /> </shape> </item> <item android:state_pressed="true"> <shape android:shape="rectangle"> <!-- 填充颜色 --> <solid android:color="?attr/colorAccent"></solid> <!-- 线的宽度,颜色灰色 --> <stroke android:width="0dp" android:color="#D5D5D5"></stroke> <!-- 矩形的圆角半径 --> <corners android:radius="6dip" /> </shape> </item> </selector> 

\color{green}{=======================================}

三、layer-list - LayerDrawable:层叠图样

>>标签含义

1、layer-list下的item标签。上面已经讲过了,item下面能放各种样式的drawable或者shape图样

>>案例

1、上左右,乱七八糟阴影,内部渐变色,坐上右上弧角
2、阴影图案
layer-list.png
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!--radius top_left,top_right--> <!--shadow top,left,right--> <!--从外到内,层层递进--> <!-- 最外层:上左右距外围2dp,内部是渐变色1、右上带弧度的矩形 --> <item android:left="2dp" android:right="2dp" android:top="2dp"> <shape android:shape="rectangle" > <solid android:color="@color/gray_3" /> <corners android:topLeftRadius="12dp" android:topRightRadius="12dp" android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp"/> </shape> </item> <!-- 第二层:上左右距外围4dp,内部是渐变色2、右上带弧度的矩形 --> <item android:left="4dp" android:right="4dp" android:top="4dp"> <shape android:shape="rectangle"> <solid android:color="@color/gray_5" /> <corners android:topLeftRadius="12dp" android:topRightRadius="12dp" android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp"/> </shape> </item> <!-- 第三层:上左右距外围6dp,内部是渐变色3、右上带弧度的矩形 --> <item android:left="6dp" android:right="6dp" android:top="6dp"> <shape android:shape="rectangle"> <solid android:color="@color/gray_7" /> <corners android:topLeftRadius="12dp" android:topRightRadius="12dp" android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp"/> </shape> </item> <!-- 最内层:上左右距外围8dp,内部是渐变色的左上、右上带弧度的矩形 --> <item android:left="8dp" android:right="8dp" android:top="8dp"> <shape android:shape="rectangle"> <gradient android:angle="45" android:startColor="@color/wx_green" android:endColor="@color/limegreen" android:type="linear"/> <corners android:topLeftRadius="12dp" android:topRightRadius="12dp" android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp"/> </shape> </item> </layer-list> 
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!--底层的左边距离上层左边3dp, 底层的顶部,距离上层的顶部6dp,如果不做这个控制,底层和上层的左侧和上侧会重合在一起--> <item android:left="3dp" android:top="6dp"> <shape> <solid android:color="#b4b5b6"/> </shape> </item> <!--上层的右边距离底层的右边3dp, 上层的底部距离底层的底部6dp--> <item android:bottom="6dp" android:right="3dp"> <shape> <solid android:color="#fff"/> </shape> </item> </layer-list> 

\color{green}{=======================================}

四、level-list - LevelListDrawable:不同程度图样

1、level-list下的item标签。
属性含义
minLevel最小值
maxLevel最大值
drawable图样

>>案例:比方说电量、wifi质量,音量等

battery_level.png

\color{red}{注意:此处level的值必须从小到大,不然会空指针异常}

<?xml version="1.0" encoding="utf-8"?> <!--此处有个坑,顺讯必须从小到大--> <level-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:minLevel="0" android:maxLevel="19" android:drawable="@drawable/battery_0" /> <item android:minLevel="20" android:maxLevel="39" android:drawable="@drawable/battery_1" /> <item android:minLevel="40" android:maxLevel="59" android:drawable="@drawable/battery_2" /> <item android:minLevel="60" android:maxLevel="79" android:drawable="@drawable/battery_3" /> <item android:minLevel="80" android:maxLevel="99" android:drawable="@drawable/battery_4" /> <item android:minLevel="100" android:maxLevel="100" android:drawable="@drawable/battery_5" /> </level-list> 
       iv_level_battery.getDrawable().setLevel(25);iv_level_battery_2.getDrawable().setLevel(63); iv_level_battery_3.getDrawable().setLevel(100); 

\color{green}{=======================================}

五、transition - TransitionDrawable:渐变图样

>>标签含义

1、transition下的item标签。上面已经讲过了,item下面能放各种样式的drawable或者shape图样还有自己的属性top,left等

>>案例

1、电量变化
draw_transition.gif
<?xml version="1.0" encoding="utf-8"?> <transition xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@mipmap/battery_1" /> <item android:drawable="@mipmap/battery_5" /> </transition> 
//得到一个Drawable,属于 TransitionDrawable 类型的TransitionDrawable transition = (TransitionDrawable)getResources().getDrawable(R.drawable.draw_transition);iv_transition_battery.setImageDrawable(transition);transition.startTransition(2000); // 设定渐变的变化市场

\color{green}{=======================================}

六、ripple - RippleDrawable:波纹图样

>>标签含义

1、ripple有下的item标签。上面已经讲过了,item下面能放各种样式的drawable或者shape图样还有自己的属性top,left等
ripple属性含义
color波纹颜色
tools:targetApilollipop,必须这个api以上才能用

>>案例

1、波纹变化,外放,内部与颜色叠加。gif图片播放太快了,实际没那么快
draw_ripple.2018-10-19 14_58_15.gif

1.1、单纯ripple,控件高度是wrap_content的话,那么波纹外扩

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="@color/red" tools:targetApi="lollipop"> </ripple> 

1.2、加一个item,有背景色,那么不会外扩,含定在此drawable中了

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="@color/red" tools:targetApi="lollipop"> <item android:drawable="@color/wx_green" /> </ripple> 

1.3、加一个蒙版遮罩,范围限定了,但是drawable设置颜色无用

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="@color/red" tools:targetApi="lollipop"> <!--mask遮罩,设置的drawable颜色会失效--> <item android:id="@android:id/mask" android:drawable="@color/wx_green" /> </ripple> 

1.4、弧角矩形按钮点击波纹效果

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="@color/red" tools:targetApi="lollipop"> <item> <shape android:shape="rectangle"> <solid android:color="@color/wx_green" /> <corners android:radius="12dp" /> </shape> </item> </ripple> 

\color{green}{=======================================}

七、inset - InsetDrawable:内嵌图样

>>标签含义

1、inset有下的shape标签。
inset属性含义
insetTop嵌入内部上边
insetBottom嵌入内部下边
insetLeft嵌入内部左边
insetRight嵌入内部右边

>>案例

1、内嵌一个图案、感觉没太大用~~
inset.png
<?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="10dp" android:insetBottom="10dp" android:insetLeft="10dp" android:insetRight="10dp"> <!--待会要插入的一个蓝色的矩形--> <shape android:shape="rectangle" > <solid android:color="@color/orange" /> </shape> </inset> 

\color{green}{=======================================}

八、scale - ScaleDrawable:缩放图样

>>标签含义

1、scale标签。
scale属性含义
drawable资源引用
scaleGravity缩放的方向, 比如: top, 缩放的时候就会向顶部靠拢,bottom, 缩放时会想底部靠拢;
scaleHeight表示Drawable能够在高度上缩放的百分比, 比如: 50%,
scaleWidth表示Drawable能够在宽度上缩放的百分比, 同上

>>案例

1、一般做图片的缩放时候用到
draw_scale.gif
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/android" android:scaleGravity="left" android:scaleWidth="50%" android:scaleHeight="100%" > </scale> 

\color{red}{注意,此ScaleDrawable要配合setLevel一起用,level在0-10000内}

//Scale Drawable不能单独的使用, 他需要配合Level等级使用, level的取值是0~10000, (0为不可见)sk_scale.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int max = seekBar.getMax(); double scale = (double)progress/(double)max; ScaleDrawable drawable = (ScaleDrawable) iv_scale.getDrawable(); drawable.setLevel((int) (10000*scale)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); 

\color{green}{=======================================}

九、clip - ClipDrawable:剪切的图样

>>标签含义

1、clip标签。
clip属性含义
drawable资源引用
clipOrientationtop\bottom\left\right\gravity,fill... 横向,竖向,中间...
gravityleft,right,top,bottom--哪个方向开始

>>案例

1、一般可用作温度计啊、声音啊,各种程度的东西。
draw_clip.gif
<?xml version="1.0" encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/draw_shape_rectangle_linear_gradient" android:clipOrientation="horizontal" android:gravity="left"> </clip> 
//Clip Drawable也要level才有用sk_clip.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int max = seekBar.getMax(); double scale = (double)progress/(double)max; ClipDrawable drawable = (ClipDrawable) tv_clip.getBackground(); drawable.setLevel((int) (10000*scale)); tv_clip.setText("Clip Progress = "+progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); 

\color{green}{=======================================}

十、rotate - RotateDrawable:旋转图样

>>标签含义

1、rotate标签。
clip属性含义
drawable资源引用
visible是否可见
pivotXpivotX表示旋转轴心在x轴横坐标上的位置,用百分比表示,表示在当前drawable总宽度百分之几的位置。
pivotY同上,Y轴方向的
fromDegrees从什么角度开始
toDegrees到什么角度

>>案例

1、一般可用作循环的东西,比如唱片啊,loading等待框啊~~
draw_rotate.gif
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/draw_shape_ring_gradient" android:fromDegrees="0" android:toDegrees="360"> </rotate> 
//Rotate Drawable也要level才有用sk_rotate.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int max = seekBar.getMax(); double scale = (double)progress/(double)max; RotateDrawable drawable = (RotateDrawable) tv_rotate.getBackground(); drawable.setLevel((int) (10000*scale)); tv_rotate.setText("Rotate Progress = "+progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); 

\color{green}{=======================================}

十一、animation-list - AnimationDrawable:动画效果图样

>>标签含义

1、animation-list标签下有item(drawable和duration属性)标签。
animation-list属性含义
oneshot是否一次,不然就是循环

>>案例

1、欢迎界面展示啊等等。。。
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/battery_1" android:duration="200"/> <item android:drawable="@drawable/battery_3" android:duration="200"/> <item android:drawable="@drawable/battery_5" android:duration="200"/> </animation-list> 
//AnimationDrawable mAnimationDrawable = new AnimationDrawable();
//mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue01), 150);//mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue02), 150);//mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue03), 150); //mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue04), 150); //mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue05), 150); //mAnimationDrawable.setOneShot(false); AnimationDrawable a = (AnimationDrawable)btn_animation_list.getBackground(); a.start();//a.stop \ a.isRunning() 

\color{green}{=======================================}

十二、bitmap - BitmapDrawable

1、截图
bd-mirror.png
bd-repeat.png
bd-clamp.png
bd-disabled.png
2、内容
xml属性含义代码
src资源:color\drawable-
antialias抗锯齿,建议开启bitmapDrawable.setAntiAlias(true);
dither颤抖处理:平滑,饱满,清晰,建议开启bitmapDrawable.setDither(true);
filter位图过滤:平滑,建议开启bitmapDrawable.setFilterBitmap(true);
gravity位置[start,end,top,bottom,center...]bitmapDrawable.setGravity(Gravity.START);
mipMap文理映射,建议关闭bitmapDrawable.setMipMap(false);
tileMode平铺方式
disabled-不使用平铺
clamp-复制边缘色彩
repeat-重复
mirror-镜像]
bitmapDrawable.setTileModeXY(Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);
bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);
bitmapDrawable.setTileModeXY(Shader.TileMode.MIRROR,Shader.TileMode.MIRROR);
3、代码
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/android" android:antialias="true" android:dither="true" android:filter="true" android:gravity="left" android:mipMap="false" android:tileMode="repeat" /> 
Bitmap bitmap = BitmapFactory.decodeResource(instance.getResources(),R.drawable.android);//drawable\mipmap\color...
BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap);
bitmapDrawable.setAntiAlias(true);//抗锯齿 bitmapDrawable.setDither(true);//抖动平滑 bitmapDrawable.setFilterBitmap(true);//过滤平滑 bitmapDrawable.setGravity(Gravity.START); //bitmapDrawable.setMipMap(false); //复制边缘色彩 bitmapDrawable.setTileModeXY(Shader.TileMode.CLAMP,Shader.TileMode.CLAMP); //重复 bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT,Shader.TileMode.REPEAT); //镜像 bitmapDrawable.setTileModeXY(Shader.TileMode.MIRROR,Shader.TileMode.MIRROR); ll_bitmap_drawale.setBackground(bitmapDrawable); 

\color{green}{=======================================}

十三、nine-patch - NinePatchDrawable

1、这个是.9图,使用方法和上面bitmap类似,不赘述。好处是可以动态拉伸此图片某些边的时候而不造成整体变形。
<?xml version="1.0" encoding="utf-8"?> <nine-patch xmlns:android="http://schemas.android.com/apk/res/android" android:src="@color/colorPrimary" android:antialias="true" android:dither="true" android:filter="true" android:gravity="center" android:mipMap="false" android:tileMode="disabled" />


作者:Kandy_JS
链接:https://www.jianshu.com/p/3f54f4f79941
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/Jeely/p/11045042.html

相关文章:

Carrier frequency 和 EARFCN的关系

Carrier frequency 和 EARFCN的关系 我们处理UE log时&#xff0c;看到LTE cell 都是用EARFCN/PCI来标示的&#xff0c;那么EARFCN和frequency 之间是什么关系呢&#xff1f; 1. EARFCN: 缩写: E-UTRA Absolute Radio Frequency Channel Number, 取值范围: 0…

十五天精通WCF——第六天 你必须要了解的3种通信模式

十五天精通WCF——第六天 你必须要了解的3种通信模式 原文:十五天精通WCF——第六天 你必须要了解的3种通信模式wcf已经说到第六天了&#xff0c;居然还没有说到这玩意有几种通信模式&#xff0c;惭愧惭愧&#xff0c;不过很简单啦&#xff0c;单向&#xff0c;请求-响应&#…

从未在一起更让人遗憾_明明是真爱,却又不能在一起

深爱一个人&#xff0c;若是无缘成为夫妻相偎相依在一起&#xff0c;在分开的很长一段时间里&#xff0c;一定会在深夜难眠&#xff0c;在梦中哭醒&#xff0c;因为你太爱他&#xff0c;太想他。人生那么长&#xff0c;在我们的一生中&#xff0c;总会有一个人&#xff0c;在你…

使用 IntraWeb (8) - 系统模板

我们可以自定义系统错误模板, 编辑 IWError.html 放到模板文件夹后, 它将替换默认的模板.{在主页面, 这是要模拟一个系统错误} procedure TIWForm1.IWButton1Click(Sender: TObject); beginRelease; end;修改前后的 IWError.html 对比:我想办法抠出了 IWError.html 源文件, 从里…

Java中常量定义的几种方式

编程中使用常量的优点&#xff1a; 常量提取出来有利于代码阅读&#xff0c;而且下次再做这种判断不用手写或复制并且提高代码的复用率&#xff0c;方便修改&#xff0c;直接通过常量类就能得到。不过我觉得提取出来并不会有利于代码性能提升&#xff0c;因为常量分配在内存的常…

PCT-36.523

LTE v 36 523-1:Part 1: Protocol conformance specification 定义了每个Case 运行的流程 v 36.523-2:Part 2: Implementation Conformance Statement(ICS) proforma specification. Table 4-1 定义了每个Case的详细背景: 1. 最早那个release 引入的这一c…

测试笔试题之相关概念

1、对手机软件的压力测试通常包括&#xff1a; &#xff08;1&#xff09;存储压力 &#xff08;2&#xff09;响应能力压力 &#xff08;3&#xff09;网络流量压力 &#xff08;4&#xff09;边界压力 2、针对手机应用软件的系统测试&#xff0c;我们通常从如下几个角度开展&…

ios 代码设置控件宽高比_用宽高比调整UIImage的大小?

我知道这很老了&#xff0c;但是感谢那篇文章-它使我从尝试使用比例尺重定向到绘制图像。万一对任何人都有利&#xff0c;我做了一个扩展类&#xff0c;我将在这里进行介绍。它允许您调整图像的大小&#xff0c;如下所示&#xff1a;UIImage imgNew img.Fit(40.0f, 40.0f);我不…

jquery入门 修改网页背景颜色

我们在浏览一些网站&#xff0c;尤其是一些小说网站的时候&#xff0c;都会有修改页面背景颜色的地方&#xff0c;这个功能使用jquery很容易实现。 效果图&#xff1a; show you code: <!doctype html> <html> <head> <meta charset"utf-8">…

对于装饰器Decorator的理解

装饰器是用来描述函数&#xff0c;记录日志&#xff0c;提供信息的函数&#xff0c;是一个为了更好的服务主函数的副函数&#xff1a; 详情还需查看&#xff1a;廖雪峰装饰器 关键在于&#xff1a;【import functools是导入functools模块。模块的概念稍候讲解。现在&#xff0c…

UE的注册流程

协议36.508 4.5节 有个表格写的很清楚&#xff1a; Table 4.5.2.3-1: UE registration procedure (state 1 to state 2)

五大主流数据库模型

转载自 五大主流数据库模型 导读&#xff1a;无论是关系型数据库还是非关系型数据库&#xff0c;都是某种数据模型的实现。本文将为大家简要介绍5种常见的数据模型&#xff0c;让我们来追本溯源&#xff0c;窥探现在流行的数据库解决方案背后的神秘世界。 什么是数据模型&#…

laytpl语法_layui语法基础

一.按钮区分​ 1.按照主题划分​ 原始&#xff1a;class "layui-btn layui-btn-primary"​ 默认&#xff1a;class "layui-btn"​ 百搭&#xff1a;class "layui-btn layui-btn-normal"​ 暖色&#xff1a;class "layui-btn layui-btn-…

黑马程序员-张老师基础加强3-内省

内省&#xff1a;javaBean JavaBean是一种特殊的Java类&#xff0c;主要用于传递数据信息&#xff0c;这种java类中的方法主要用于访问私有的字段&#xff0c;且方法名符合某种命名规则。 JavaBean的属性是根据其中的setter和getter方法来确定的&#xff0c;而不是根据其中的成…

shell 中长命令的换行处理

考察下面的脚本&#xff1a; emcc -o ./dist/test.html --shell-file ./tmp.html --source-map-base dist -O3 -g4 --source-map-base dist -s MODULARIZE1 -s "EXPORT_NAME\"Test\"" -s USE_SDL2 -s LEGACY_GL_EMULATION1 --pre-js ./pre.js --post-js ./…

golang bufio.newscanner如何超时跳出_Golang微服务的熔断与限流

(给Go开发大全加星标)来源&#xff1a;Che Danhttps://medium.com/dche423/micro-in-action-7-cn-ce75d5847ef4【导读】熔断和限流机制对于大流量高并发服务来说不可或缺&#xff0c;尤其在微服务架构下更需要在服务中配置熔断限流机制。对可用性要求高的系统&#xff0c;熔断和…

JasperReport报表设计4

在JRXML模板&#xff08;或JRXML文件&#xff09;中的JasperReport 都是标准的 XML文件&#xff0c;以.JRXML扩展。所有JRXML文件包含标签<jasperReport>&#xff0c;作为根元素。这反过来又包含许多子元素&#xff08;所有这些都是可选的&#xff09;。JasperReport框架…

C++基本要点复习--------coursera程序设计实习(PKU)的lecture notes

因为一些特性复杂&#xff0c;很多时候也用不到一些特性&#xff0c;所以忘记了&#xff0c;算是随笔&#xff0c;也当作一个临时查找的手册。没有什么顺序&#xff0c;很杂。 1.构造函数通过函数重载的机制可以有多个&#xff08;不同的构造函数&#xff0c;参数个数&#xff…

Kibana + Elasticsearch + ik分词的集群搭建

Elasticsearc&#xff1a; Elasticsearch 是一个分布式的搜索和分析引擎&#xff0c;可以用于全文检索、结构化检索和分析&#xff0c;并能将这三者结合起来。Elasticsearch 基于 Lucene 开发&#xff0c;是 Lucene 的封装&#xff0c;提供了 REST API 的操作接口&#xff0c;开…

VOLTE parameter in Attach Request/Accept message

VOLTE字面上是:Voice over LTE. 但是人们所提到的VOLTE,实际上是指“Voice over LTE utilizing IMS” Attach Request/Accept消息中包含了VOLTE相关的参数。 1. Attach request 参考: 3GPP 24.301 – 8.2.4 关注红框内的3个参数&#xff1a; SrvccToGeranOrUtranCapability 参…

[YY题]HDOJ5288 OO’s Sequence

题意&#xff1a;求这个式子 $\sum \limits_{i1}^{n} \sum \limits_{j1}^{m} f(i, j) mod (10^9 7)$ 的值 就是对每个区间[i, j]枚举区间中的每个数$a_i$到$a_j$, 判断这个$a$是否对[i, j]这个区间内所有数取模都不等于0&#xff0c; 若是&#xff0c;则这个区间满足条件 问有…

python 读取excel文件 效率 时间 格式_python读取Excel文件中的时间数据

在使用python读取Excel文件中的时间格式&#xff0c;碰到的时间格式转换问题&#xff1a;读取这样的表格&#xff1a;输出这样的数据结果&#xff1a;然而这样的结果却不是我们想要的&#xff0c;我们需要的是这样的结果:1、安装python官方库---datetime引入datetime库import d…

操作无法完成后台打印程序无法运行

同事反映原共享的打印机无法打印。我删除重新添加时系统提示 操作无法完成后台打印程序无法运行。于是我打开服务找到print spooler服务进程设置自动开启后重新添加问题依旧。在网上查到的方法是病毒清了后你的 SPOOLSV.EXE文件就没有了,且在服务里你的后台打印print spooler也…

NodeJS 模块

cheerio 可以用jQuery操作DOM&#xff08;服务器端&#xff09; 转载于:https://www.cnblogs.com/tujw/p/11054252.html

Linux下netstat命令详解&&netstat -anp | grep 讲解

Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

Linux命令——根据端口号查进程

查出的数据第二列(16615)是elasticsearch的进程号。通常我们会根据端口号查进程号,或者通过进程号查端口号。linux环境下,我们常常会查询进程号pid。最常用ps -ef |grep xx。根据端口port查进程。根据端口port查进程。根据进程pid查端口。根据进程pid查端口。

RRC Connection Reconfiguration

RRC Connection Reconfiguration Dir: E-UTRAN -> UE SRB: SRB1 这个消息用来修改RRC连接&#xff0c;主要目的&#xff1a; 1. To establish/modify/release Radio Bearers; 无线承载 2. To perform Handover; 切换 3. To setup/modify/release Measurements; 测量…

H - Parity game-poj1733(需要离散化)

题意&#xff1a;给一个序列这个序列都是由0和1组成&#xff0c;现在随意拿出来一个序列&#xff0c;然后说出他的和是奇数还是偶数&#xff0c;因为有可能存在假话&#xff0c;让你判断前多少条没有假话&#xff0c;也就是查找第一个假话的位置-1//这道题很像D题&#xff0c;都…

redis 缓存过期默认时间_缓存的必知必会:一文搞懂Redis持久化和过期机制

本文主要介绍了 Redis 持久化的两种机制&#xff1a;RDB 和 AOF&#xff0c;以及键过期的策略&#xff1a;惰性删除和定期删除&#xff0c;还有 RDB、AOF 和复制功能对过期键的处理。RDBRDB 是 Redis 持久化的第一种方式。有两个 Redis 命令可以用于生成 RDB 文件&#xff0c;一…

ASP.NET MVC 5 - 视图

2019独角兽企业重金招聘Python工程师标准>>> 在本节中&#xff0c;你要去修改HelloWorldController类&#xff0c;使用视图模板文件&#xff0c;在干净利索地封装的过程中&#xff1a;客户端浏览器生成HTML。 您将创建一个视图模板文件&#xff0c;其中使用了ASP.NE…