Android绘图机制(一)--屏幕尺寸信息
来源:互联网 发布:数据分析就业前景 编辑:程序博客网 时间:2024/06/06 00:28
前言:
在看完Android群英传这本书后,感觉自己还是空落落的,整本书看的很快,追求速度,和里面的代码实现,想着知道怎么用就行了,后来到了整个项目的开发时就觉得,确实是知道怎么做,却很难脱离书本,或者是源码去写自己的东西,所以我打算停下目前这种赶进度的心态,真正的沉下来,把这本数好好的回味一遍.也希望和我有同样想法的朋友,不要急于求成,这样不仅不能学好,而且会让自己感受不到Android的魅力,而渐渐的丧失学习的动力.
我先写Android的绘图机制是为了后面自定义View,做下铺垫的.索然书上安排的顺序是先讲解自定义View,再讲解绘图机制的,可能希望我们有一个整体的把握,但是这样比较难以入门,所以我觉得应该再学习自定义View前,先把绘图机制弄明白,后续自定义View也会学的轻松一些.好了言归正转,下面就是本篇博客的主题内容了.
概述
想要了解如何绘制图形,首先得要了解一些背景知识.我们绘制图形的硬件基础就是那块手机屏幕,所以想要了解如何画好一幅画,首先得对画画的纸有着深入的理解,才能画出一幅画.Android的手机屏幕,不管是分辨率,还是大小都是五花八门的样式.这在一定程度上提高了绘图的难度.要想保证再不同的屏幕上我们所绘出的图形的准确性,那么我们就必须对屏幕有着充分的认知
屏幕参数
手机屏幕的常用参数有
屏幕大小 : 指屏幕对角线的长度, “寸”
分辨率 : 指手机屏幕上的像素点的个数
PPI : 又叫DPI 每英寸像素 , 由对角线的像素点数除以屏幕大小 , 通常400PPI就很高了
系统屏幕密度
系统定义了几个标准的DPI值,作为手机固定的DPI
独立像素dp
Android系统以mdpi的屏幕为标准,1px = 1dp , 其他屏幕则通过该比例进行换算
ldpi : mdpi : hdpi : xhdpi : xxdpi = 3 : 4 : 6 : 8 : 12.
注: px是像素的意思 , 即屏幕中可以显示的最小单元 , pt则是磅数的意思,常用作字体的单位 , dp , sp则是全新单位,他们代表了在这个屏幕中的一个比例大小.以保证不同的控件在不同的密度的屏幕上的显示比例保持一致.
单位转换
package com.example.screenutil;import android.content.Context;import android.util.TypedValue;public class DisplayUtil { /** * 将px转换为dip,保证尺寸大小不变 */ public static int px2dp(Context context , float pxValue){ final float scale = context.getResources().getDisplayMetrics().density;//换算比例 return (int)(pxValue/scale + 0.5f); } /** * 将dip或dp转换为px值,保证尺寸大小不变 */ public static int dip2px(Context context , float dipValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(dipValue * scale + 0.5f); } /** * 将px值转换为sp,保证文字大小不变 */ public static int px2sp(Context context , float pxValue){ final float fontScale = context.getResources().getDisplayMetrics().density; return (int)(pxValue/fontScale + 0.5f); } /** * 将sp值转换为px值 */ public static int sp2px(Context context , float spValue){ final float fontScale = context.getResources().getDisplayMetrics().density; return (int)(spValue * fontScale + 0.5f); } /** *系统提供的TypeValue类也可以用于转换 * dp2px */ protected int dp2px(Context context,int dp){ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP , dp ,context.getResources().getDisplayMetrics()); } /** * sp2px */ protected int sp2px(Context context , int sp){ return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP , sp , context.getResources().getDisplayMetrics()); }}
- Android绘图机制(一)--屏幕尺寸信息
- android屏幕尺寸信息
- (转)Android屏幕Framebuffer绘图机制
- Android绘图机制(一)
- 屏幕尺寸信息
- 屏幕的尺寸信息
- Android群英传——第六章屏幕尺寸信息
- 获取屏幕的尺寸信息
- Android绘图机制(一) View类
- Android绘图机制(一) View类
- Android各种屏幕尺寸
- Android 获取屏幕尺寸
- Android 屏幕 尺寸 单位
- Android 屏幕尺寸
- Android各种屏幕尺寸
- Android获取屏幕尺寸
- Android的屏幕尺寸
- android 获取屏幕尺寸
- 找出规律快速实现双螺旋矩阵
- Masonry框架基本使用方法
- Java中的final关键字解析
- sql中的日期比较(年,月,日)
- php三目运算的问题
- Android绘图机制(一)--屏幕尺寸信息
- 父元素使用opacity将子元素都变透明了的解决方案
- 算法积累-跳台阶问题
- C 编程语言走上下坡路了吗?
- 正则表达式:手机、邮箱、IP、日期
- Python面向对象01
- php操作memcache缓存基础方法
- Tomcat(8005,8080,8009)端口占用问题常见原因及解决方法
- zookeeper集群搭建