Android初级基础知识复习(二) —— 图形Drawable

1. 图形Drawable

  Android把所有显示出来的图形都抽象为Drawable(可绘制的)。这里的图形不止是图片,还包括色块、画板、背景等。
  drawable文件放在res目录的各个drawable目录下。\res\drawable一般存放的是描述性的XML文件,图片文件一般放在具体分辨率的drawable目录下。

  1. drawable-ldpi里面存放低分辨率的图片(如240×320),现在基本没有这样的智能手机了。
  2. drawable-mdpi里面存放中等分辨率的图片(如320×480),这样的智能手机已经很少了。
  3. drawable-hdpi里面存放高分辨率的图片(如480×800),一般对应4英寸~4.5英寸的手机(但不绝 对,同尺寸的手机有可能分辨率不同,手机分辨率就高不就低,因为分辨率低了屏幕会有模糊的感 觉)。
  4. drawable-xhdpi里面存放加高分辨率的图片(如720×1280),一般对应5英寸~5.5英寸的手机。
  5. drawable-xxhdpi里面存放超高分辨率的图片(如1080×1920),一般对应6英寸~6.5英寸的手机。
  6. drawable-xxxhdpi里面存放超超高分辨率的图片(如1440×2560),一般对应7英寸以上的平板电脑。

在代码中引用drawable文件可分为两种情况:
(1)使用setBackgroundResource和setImageResource方法,可直接在参数中指定drawable文件的资源 ID,例如“R.drawable.***”。
(2)使用setBackgroundDrawable、setImageDrawable和setCompoundDrawables等方法,参数是Drawable 对象,这时得先从资源文件中生成Drawable对象,示例代码如下:
Drawable drawable = getResources().getDrawable(R.drawable.apple);

2.状态列表图形

  一般drawable是静态图形,如Button按钮的背景在正常情况下是凸起的,在按下时是凹陷的,从按下到 弹起的过程,用户便能知道点击了这个按钮。
  这种情况会用到 Drawable的一个子类StateListDrawable,该子类在XML文件中定义不同状态时呈现图形列表。要想在项目中 创建状态图形的XML文件,则需右击drawable目录,然后在右键菜单中依次选择New→Drawable resource file,即可自动生成一个空的XML文件。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/colorPrimary"/>
    <item android:drawable="@color/colorAccent"/>
</selector>

  该XML定义文件中的关键点是state_pressed,值为true表示按下时显示button_pressed图像,其余情况显 示button_normal图像。
状态类型取值说明:

  1. state_pressed:是否按下(常用的控件:按钮Button)
  2. state_checked:是否勾选(常用的控件:单选框RadioButton、复选框CheckBox)
  3. state_foucused:是否获取焦点(常用的控件:文本编辑框EditText)
  4. state_selected:是否选中(各控件均可)

3.形状图形

  前面讲到可在XML文件中描述状态列表图形的定义,还有一种常用的XML图形文件,是描述形状定义 的图形—— shape图形。
  形状图形的定义文件以shape元素为根节点。根节点下定义了6个节点:corners(圆角)、gradient(渐变)、padding(间隔)、size(尺寸)、solid(填充)、stroke(描边),各节点的属性值主要是长宽、半径、角度以及颜色。下面是形状图形各个节点和属性的简要说明。

3.1 shape

shape是XML文件的根节点,用来描述该形状图形是哪种几何图形。
shape:字符串类型,图形的形状。
常用属性说明:

  1. rectangle:矩形。默认值
  2. oval:椭圆。
  3. line:直线。此时必须设置stroke节点,不然会报错。
  4. ring:圆环。
3.2 corners

corners是shape的下级节点,用来描述4个圆角的规格定义。若无corners节点,则表示没有圆角。
常用属性说明:

  1. bottomLeftRadius:像素类型,左下圆角的半径。
  2. bottomRightRadius:像素类型,右下圆角的半径。
  3. topLeftRadius:像素类型,左上圆角的半径。
  4. topRightRadius:像素类型,右上圆角的半径。
  5. radius:像素类型,圆角半径(若有上面4个圆角半径的定义,则不需要radius定义)。
3.3 gradient

gradient是shape的下级节点,用来描述形状内部的颜色渐变定义。若无gradient节点,则表示没有渐变 效果。
常用属性说明:

  1. angle:整型,渐变的起始角度。为0时表示时钟的9点位置,值增大表示往逆时针方向旋转。例如, 值为90表示6点位置,值为180表示3点位置,值为270表示0点/12点位置。

  2. type:字符串类型,渐变类型。
    渐变类型的取值说明:
    linear:线性渐变,默认值
    radial:放射渐变,起始颜色就是圆心颜色
    sweep:滚动渐变,即一个线段以某个端点为圆心做360度旋转

  3. centerX:浮点型,圆心的X坐标。当android:type="linear"时不可用。

  4. centerY:浮点型,圆心的Y坐标。当android:type="linear"时不可用。

  5. gradientRadius:整型,渐变的半径。当android:type="radial"时才需要设置该属性。

  6. centerColor:颜色类型,渐变的中间颜色。

  7. startColor:颜色类型,渐变的起始颜色。

  8. endColor:颜色类型,渐变的终止颜色。

  9. useLevel:布尔类型,设置为true无渐变色、false有渐变色。

3.4 padding

padding是shape的下级节点,用来描述形状图形与周围视图的间隔大小。
常用属性说明:

  1. bottom:像素类型,与下边的间隔。
  2. left:像素类型,与左边的间隔。
  3. right:像素类型,与右边的间隔。
  4. top:像素类型,与上边的间隔。
3.5 size

size是shape的下级节点,用来描述形状图形的尺寸大小(宽度和高度)。若无size节点,则表示宽高自 适应。
常用属性说明:

  1. height:像素类型,图形高度。
  2. width:像素类型,图形宽度。
3.6 solid

solid是shape的下级节点,用来描述形状图形内部的填充色彩。若无solid节点,则表示无填充颜色。
常用属性说明:

  1. color:颜色类型,内部填充的颜色。
3.7 stroke

stroke是shape的下级节点,用来描述形状图形四周边线的规格定义。若无stroke节点,则表示不存在描 边。
常用属性说明:

  1. color:颜色类型,描边的颜色。
  2. dashGap:像素类型,每段虚线之间的间隔。
  3. dashWidth:像素类型,每段虚线的宽度。
  4. width:像素类型,描边的厚度。若dashGap和dashWidth有一个值为0,则描边为实线。

在实际开发中,常用的有3个节点:corners(圆角)、solid(填充)和stroke(描边)。

4.小知识:日志Log/提示Toast

4.1 Log

  给开发者看的提示信息要调用Log类的相应方法,日志打印结果可在Android Studio界面下方的logcat小 窗口查看。Log类各种方法的区别在于日志的等级,具体说明如下:

  1. Log.e:表示错误信息,比如可能导致程序崩溃的异常。
  2. Log.w:表示警告信息。
  3. Log.i:表示一般消息。
  4. Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试。
  5. Log.v:表示冗余信息。
4.2 Toast

  给用户看的提示信息要调用Toast类的相应方法,提示文字会在屏幕下方以一个小窗口临时展现。

实战练习:简单计算器案例

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值