Android群英传笔记-Android绘图机制与处理技巧

Android屏幕相关知识

屏幕参数

屏幕大小:屏幕对角线长度,用寸来衡量
分辨率:手机屏幕像素点个数,例如 720*1280
PPI:每英寸像素,又称DPI.有一些固定的DPI,就是我们熟悉的dipi,mdpi,xhdpi等等。

独立像素密度dp:平时我们控制view之间的距离就是用dp,不同的dpi,会有不同的换算。例如 mdpi中 ldp=1px,hdpi中,1dp=1.5px等等。

对于sp,dp转为px的工具类有许多现成的,应该可以搜索到并引入项目中使用。

关于sp:android系统是可以设置字体大小的,参照物就是设置的字体大小.然而,系统字体放大了一倍,那么,如果使用sp为单位的字就会放大一倍显示,如果以dp为单位的字体就不会放大.所以说,sp根本就是和系统字体大小有关的单位!!!

2D绘图

在代码里,通过Canvas对象,和画笔 paint,来实现一些图像的绘制。

xml绘图

bitmap

可以在xml文件中,将图片转为bitmap对象,供我们在程序中使用。

shape

这个是应用最多的,一般可以通过shape绘制一些图像,然后作为一些控件的背景,这样就省得自己花费大量精力去自定义view了(如果只是想改变控件的外形)。
shape也十分强大,可以实现一些扁平化,拟物,阴影等效果。一些边框,渐变,填充等等常用属性可见书中。

图层 Layer

图层在实际开发过程中,也是广泛应用的。一般就是通过xml文件的图层来组合图片,来达到一些不同效果的实现。我们的app图标,其实也是应用了图层。

选择器 Selector

选择器我们也比较熟悉且应用广泛,一般应用于View对点击触摸事件。通过xml里编写选择器(例如颜色选择器),然后作为一些控件的背景,这样控件就会根据事件产生改变。状态有focus,selected,pressed等等。

Android绘图技巧

Canvas

Canvas.save():保存画布,使得后续操作就如在一个新的画布操作一样。
Canvas.restore(): 合并sava前后的图层。
Canvas.translate(): 画布平移,其实就是使得画布的原点从左上角的(0,0),移动到(x,y).
Canvas.rotate(): 将坐标系旋转一定角度,这在画时钟之类的圆周,有规律图的时候十分有用。

Layer图层

在通过Canvas画图时,可以通过saveLayer(),saveLayerAlpha()方法将一个图像入栈,之后所有canvas方法画图操作都发生在入栈的图上,使用restore(),restoreToCount()方法将图像出栈,出栈时,出栈图像会被绘制在上层canvas上。

Android图像处理-色彩特效

内容较多,后面专门写博客记录。

Android图像处理-图形特效

内容较多,后面专门写博客记录。

Android图像处理-画笔特效

内容较多,后面专门写博客记录。

Android-SurfaceView

简介

Android系统的对View的绘图可以满足大部分的需求,但也有不足之处。
View通过刷新来重绘视图,通过系统发出的VSYNC信号来进行屏幕的重绘,刷新间隔为16ms,如果view的绘制没有在16ms内完成,就会出现卡帧。如果执行的操作逻辑太多,特别是需要不断刷新界面,从而不断阻塞主线程,导致画面卡帧

我们经常会见到这样的警告:
“Sky xx frames !the application may be doing too munch woirk on its main thread”

SurfaceView就是解决这些的问题的。

  • View适用于主动更新,而SurfaceView适用于被动更新
  • View在主线程刷新,而SurfaceViw在子线程更新
  • View在画图时没有双缓冲机制,surfaceView在底层实现双缓冲机制

总而言之,surfaceView适用于频繁刷新,或者刷新时数据量比较大的情况

什么是双缓冲机制?

https://www.jianshu.com/p/03449246930b

SurfaceView的使用

一般需要定义的三个成员变量:
surfaceViewHolder mHoler
Canvas mcanvas

Bolean mIsDrawing//子线程标志位

可以通过sleep来控制绘制的节奏和节约资源。

记得surfaceViewHolder的初始化,并注册回调。

通过surfaceViewHolder的lockCanvas()方法可以获取到Cancas对象,这个对象是上次绘制的canvans,而不是全新的对象。

书里有模板代码和一些小例子,使用的时候可以查询书。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值