《Android群英传》读书笔记6.Android绘图机制与处理技巧

1. 屏幕的尺寸信息

1.1. 屏幕参数
  • 屏幕大小:指屏幕对角线的长度,例如4.7寸手机、5.5寸手机
  • 分辨率:指手机屏幕的像素点个数,例如720×1280,指宽有720个像素点,而高有1280个像素点
  • PPI:每英寸像素(Pixels Per Inch)又被称为DPI(Dots Per Inch),由对角线的像素点数除以屏幕的大小得到
1.2. 系统屏幕密度

系统定义了几个标准的DPI值,作为手机的固定DPI

密度ldpimdpihdpixhdpixxhdpi
密度值120160240320480
分辨率240×320320×480480×800720×12801080×1920

注:此表仅供参考,如小米4c手机,分辨率1920×1080,尺寸5英寸,屏幕像素密度441ppi。因在具体应用中1dp = 3px,故密度为xxhdpi

1.3. 独立像素密度dp

由于各种屏幕密度的不同,导致同样像素大小的长度,在不同密度的屏幕上显示长度不同
Android系统使用mdpi的屏幕作为标准,在这个屏幕上1px = 1dp
例如同样是100dp的长度,在mdpi中为100px,而在hdpi中为150px
在hdpi中1dp = 1.5px,在xhdpi中1dp = 2px,在xxhdpi中1dp = 3px

1.4. 单位转换

可将dp、sp转换为px的工具类保存到项目中

2. 2D绘图基础

系统通过提供的Canvas对象来提供绘图方法,如drawPoint(点)、drawLine(直线)、drawLines(多条直线)、drawRect(矩形)、drawRoundRect(圆角矩形)、drawCircle(圆)、drawVertices(多边形)、drawArc(弧形或扇形)、drawOval(椭圆)、drawText(文本)、drawPosText(指定位置文本)、drawPath(路径)等等,例

paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(left, top, right, bottom, paint);

3. Android XML绘图

3.1. Bitmap
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_launcher">
3.2. Shape

例子:通过渐变实现阴影效果

<?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>
3.3. Layer
<?xml version="1.0" encoding="uft-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_launcher" />
    <item
        android:drawable="@drawable/ic_launcher"
        android:left="10.0dip"
        android:top="10.0dip"
        android:right="10.0dip"
        android:bottom="10.0dip" />
</layer-list>

通过layer、layer-list可以实现图层效果,图片会依次叠加

3.4. Selector

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>

4. Android绘图技巧

4.1. Canvas
  • Canvas.save():保存画布,将之前的所有已绘制图像保存起来,让后续的操作就好像在一个新的图层上操作一样
  • Canvas.restore():合并图层操作,将在save()之后绘制的所有图像与save()之前的图像进行合并
  • Canvas.translate():画布平移,即坐标系平移。在调用translate(x, y)方法之后,则将原点(0, 0)移动到了(x, y),之后的所有绘图操作都将以(x, y)为原点执行
  • Canvas.rotate():画布翻转,即坐标系翻转,将坐标系旋转一定的角度
4.2. Layer图层

Android通过调用saveLayer()方法、saveLayerAlpha()方法将一个图层入栈,使用restore()方法、restoreToCount()方法将一个图层出栈。入栈的时候,后面所有的操作都发生在这个图层上,而出栈的时候,则会把图像绘制到上层Canvas上。

5. Android图像处理之色彩特效处理

(待续……)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值