Android 绘图机制与处理技巧-1
2017-04-05 20:59
204 查看
android 屏幕相关知识
屏幕参数屏幕大小
屏幕大小指对角线的长度,通常用寸表示(1寸=3.3333333厘米(cm))
分辨率
分辨率指手机像素点的个数为 width * height 模式
PPI
每英寸像素(Pixels per Inch,DPI),由对角线的像素点除以对角线的长度得到的
系统的屏幕密度(PPI,由Google定义的标准的屏幕密度,为了减少屏幕的碎片化,也为了更好的屏幕适配)
系统屏幕密度分类
密度 | ldpi | mdpi | hdpi | xhdpi | xxhdpi |
密度值 | 120 | 160 | 240 | 320 | 480 |
分辨率 | 240×320 | 320×480 | 480×800 | 720×1280 | 1080×1920 |
独立像素密度是相对于物理像素密度提出的,是为了解决在不同的设备上的物理屏幕密度大小不一样的问题
Android 以160(mdpi)的屏幕密度大小为标准,规定1px=1dp(dip),其他的物理密度可以通过这个密度进行转化为独立像素密度
转化的比例为 l:m:h:xh:xxh = 3:4:6:8:12 其中m为基准
用于代码的转换公式 dp * scale = px,只要找到scale就可以进行转换了,
float scale = getApplicationContext().getResources().getDisplayMetrics().density;
平面绘图基本知识
平面绘图一共需要两个类加上一个形状,这两个类是指Canvas和Paint类,而这个形状是指由canvas内决定的画什么形状,内容由多种形式提供,XML、Java代码等基本的Canvas和Paint的使用粗略的说一下,因为这个API真的非常好理解canvas.drawRect();一看就是画矩形的。你可以想象一下真实世界里面的画布和画笔就可以得知功能了,画布决定了哪些内容会呈现,而画笔则决定了画的颜色啊,形状啊,等等。这里说一下Path的使用
Path的使用步骤
首先移动到一个位置
path.moveTo(x,y);
开始画东西,比如画一条线
path.lineTo(a,b) 上面的这两行代码的含义是从(x,y)到(a,b)画一条线
3.在调好画笔的颜色宽度等的情况下使用canvas,drawPath()将这条路径画上去
XML 绘图
通过XML文件对图像的引用、描绘等也是可以画图的,比如常用的src=”@drawable/ic_launcher”这就是最常见的使用XML绘图的例子,所有绘制的图形的XML文件和图片文件都应该放在res/drawable下
shape绘图基本知识,下面由代码来展示,忽略掉了具体的配置情况
<?xml version="1.0" encoding="utf-8"?> <!--默认是rectangle--> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="通过这个属性来设置具体的形状"> <corners/> <!--这个属性在shape为矩形的时候调用--> <gradient/> <!--渐变,主要用来调整颜色,--> <solid/> <!--直接为shape填充颜色--> <padding/> <!--调整shape与边框之间的间距,这个属性要配合layer-list来使用,否则是没效果的--> <size/> <!--设置宽度--> <stroke/> <!--指定边框的相关属性--> </shape>
在绘制Android群英传中的一个Shape的时候差点崩掉,就是Layer上面的那个图,怎么设置的padding没有效果呢?想来想去没结果,最后看到这是个层叠的形状,那么试试layer-list吧,结果还真是,用书上的那段代码真的是弄不出来,下面贴出我的这段代码
<?xml version="1.0" encoding="utf-8"?> <layer-list> <item> <!--前面的绘制的边界是下一个绘制的新边界,例如我第一个设置了padding,那么新的边界=原边界-padding的值--> <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#171717" android:endColor="#000000" android:angle="45"/> <padding android:top="0dp" android:left="0dp" android:right="7dp" android:bottom="7dp"/> <corners android:radius="8dp"/> </shape> </item> <item> <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#981573" android:endColor="#80bf176b" android:angle="45"/> <corners android:radius="8dp"/> </shape> </item> </layer-list>
并且发现了一个现象,就是你在上一层设置了padding,但是padding值并不在这个图层显示出来这个值的效果,并不是失效了,这个padding其实是为下一个图层做的准备,因为下个图层就会绘制到这个设置了padding的图层上,padding值的效果就会显现出来
* Selector 选择器的使用,一般使用在存在切换效果的控件中。例如给Button设置点击和未点击时候的背景的时候就可以使用这个Selector来做,未选中是一个效果,选中就又是一个效果,下面给出一个常用的例子
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/shape_introduce"/> <!--这些i颜色是可以替换成shape的或者layer-list的,只要是能显示出来的基本上都能替换--> <item android:drawable="@color/colorPrimary"/> </selector>
别小看这个例子,当时可是弄了我很长一段时间
a505
的,你不信试试将这两个item颠倒一下,你会发现颠倒了以后就没效果了,我也不知道怎么回事,到最后只能强制记住了,先写pressed的,再写正常状态下的
好了今天的任务结束了,还要回去背单词~~~~啊
相关文章推荐
- Android群英传学习-Android绘图机制与处理技巧
- Android群英传学习——第六章、Android绘图机制与处理技巧
- Android群英传之Android绘图机制与处理技巧
- Android绘图机制与处理技巧(三)Android图像处理之色彩特效处理
- 《Android群英传》读书笔记6.Android绘图机制与处理技巧
- 第6章 Android绘图机制与处理技巧(Part 1)
- Android群英传读书笔记第六章(Android绘图机制与处理技巧)
- Android群英传知识点回顾——第六章:Android绘图机制与处理技巧
- Android绘图机制与处理技巧(五)——View的孪生兄弟SurfaceView
- Android绘图机制与处理技巧(二)Android绘图技巧
- Android绘图机制与处理技巧(六)Android图像处理之SurfaceView
- Android绘图机制与处理技巧(二)——Android图像处理之色彩特效处理
- Android绘图机制与处理技巧
- 《Android群英传》读书笔记(5)第六章:Android绘图机制与处理技巧之一
- Android绘图机制与处理技巧-更新中
- 《Android群英传》读书笔记(6)第六章:Android绘图机制与处理技巧之二
- Android绘图机制与处理技巧(五)Android图像处理之画笔特效处理
- 第六章Android绘图机制与处理技巧(Android群英传)
- Android进阶-View系列(三)-Android绘图机制与处理技巧(上)
- Android绘图机制与处理技巧