系统定义了几个标准的DPI值,作为手机的固定DPI
密度 | ldpi | mdpi | hdpi | xhdpi | xxhdpi |
---|---|---|---|---|---|
密度值 | 120 | 160 | 240 | 320 | 480 |
分辨率 | 240×320 | 320×480 | 480×800 | 720×1280 | 1080×1920 |
注:此表仅供参考,如小米4c手机,分辨率1920×1080,尺寸5英寸,屏幕像素密度441ppi。因在具体应用中1dp = 3px,故密度为xxhdpi
由于各种屏幕密度的不同,导致同样像素大小的长度,在不同密度的屏幕上显示长度不同 Android系统使用mdpi的屏幕作为标准,在这个屏幕上1px = 1dp 例如同样是100dp的长度,在mdpi中为100px,而在hdpi中为150px 在hdpi中1dp = 1.5px,在xhdpi中1dp = 2px,在xxhdpi中1dp = 3px
可将dp、sp转换为px的工具类保存到项目中
系统通过提供的Canvas对象来提供绘图方法,如drawPoint
(点)、drawLine
(直线)、drawLines
(多条直线)、drawRect
(矩形)、drawRoundRect
(圆角矩形)、drawCircle
(圆)、drawVertices
(多边形)、drawArc
(弧形或扇形)、drawOval
(椭圆)、drawText
(文本)、drawPosText
(指定位置文本)、drawPath
(路径)等等,例
例子:通过渐变实现阴影效果
<?xml version="1.0" encoding="uft-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" // 默认为rectangle android:shape="rectangle"> <corners // 当shape="rectangle"时使用 // 半径,会被topLeftRadius等单个半径属性覆盖,默认为1dp android:radius="8dp"/> <gradient // 渐变 android:startColor="#FF5DA2FF" android:endColor="#805FBBFF" android:angle="45"/> <padding android:left="7dp" android:top="7dp" android:right="7dp" android:bottom="7dp"/></shape>通过layer、layer-list可以实现图层效果,图片会依次叠加
Selector的作用在于帮助开发者实现静态绘图中的事件反馈,通过给不同的事件设置不同的图像,从而在程序中根据用户输入,返回不同的效果
<?xml version="1.0" encoding="uft-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 默认时的背景图片 --> <item android:drawable="@drawable/X1" /> <!-- 没有焦点时的背景图片 --> <item android:state_window_focused="false" android:drawable="@drawable/X2" /> <!-- 非触摸模式下获得焦点并单击时的背景图片 --> <item android:state_focused="true" android:state_PRessed="true" android:drawable="@drawable/X3" /> <!-- 触摸模式下单击时的背景图片 --> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/X4" /> <!-- 选中时的图片背景 --> <item android:state_selected="true" android:drawable="@drawable/X5" /> <!-- 获得焦点时的图片背景 --> <item android:state_focused="true" android:drawable="@drawable/X5" /></selector>Canvas.save()
:保存画布,将之前的所有已绘制图像保存起来,让后续的操作就好像在一个新的图层上操作一样Canvas.restore()
:合并图层操作,将在save()
之后绘制的所有图像与save()
之前的图像进行合并Canvas.translate()
:画布平移,即坐标系平移。在调用translate(x, y)
方法之后,则将原点(0, 0)移动到了(x, y),之后的所有绘图操作都将以(x, y)为原点执行Canvas.rotate()
:画布翻转,即坐标系翻转,将坐标系旋转一定的角度Android通过调用saveLayer()
方法、saveLayerAlpha()
方法将一个图层入栈,使用restore()
方法、restoreToCount()
方法将一个图层出栈。入栈的时候,后面所有的操作都发生在这个图层上,而出栈的时候,则会把图像绘制到上层Canvas上。
(待续……)
新闻热点
疑难解答