Android绘图机制(一)--屏幕尺寸信息

原创 2016年08月29日 16:03:55

前言:

在看完Android群英传这本书后,感觉自己还是空落落的,整本书看的很快,追求速度,和里面的代码实现,想着知道怎么用就行了,后来到了整个项目的开发时就觉得,确实是知道怎么做,却很难脱离书本,或者是源码去写自己的东西,所以我打算停下目前这种赶进度的心态,真正的沉下来,把这本数好好的回味一遍.也希望和我有同样想法的朋友,不要急于求成,这样不仅不能学好,而且会让自己感受不到Android的魅力,而渐渐的丧失学习的动力.
我先写Android的绘图机制是为了后面自定义View,做下铺垫的.索然书上安排的顺序是先讲解自定义View,再讲解绘图机制的,可能希望我们有一个整体的把握,但是这样比较难以入门,所以我觉得应该再学习自定义View前,先把绘图机制弄明白,后续自定义View也会学的轻松一些.好了言归正转,下面就是本篇博客的主题内容了.

概述

想要了解如何绘制图形,首先得要了解一些背景知识.我们绘制图形的硬件基础就是那块手机屏幕,所以想要了解如何画好一幅画,首先得对画画的纸有着深入的理解,才能画出一幅画.Android的手机屏幕,不管是分辨率,还是大小都是五花八门的样式.这在一定程度上提高了绘图的难度.要想保证再不同的屏幕上我们所绘出的图形的准确性,那么我们就必须对屏幕有着充分的认知

屏幕参数

手机屏幕的常用参数有

  • 屏幕大小 : 指屏幕对角线的长度, “寸”

  • 分辨率 : 指手机屏幕上的像素点的个数

  • PPI : 又叫DPI 每英寸像素 , 由对角线的像素点数除以屏幕大小 , 通常400PPI就很高了

系统屏幕密度

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

密度 ldpi mdpi hdpi xhdpi xxhdpi
密度值 120 160 240 320 480

独立像素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屏幕尺寸与密度

术语和概念 屏幕尺寸 屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如2.8寸,3.5寸)。 简而言之,Android把所有的屏幕尺寸简化为四类:超大、大、正常、小。 (small, normal,...
  • dsc114
  • dsc114
  • 2015-11-08 15:11
  • 1132

【分辨率】Android 获取屏幕尺寸与密度

android中获取屏幕的长于宽,参考了网上有很多代码,但结果与实际不符,如我的手机是i9000,屏幕大小是480*800px,得到的结果却为320*533 结果很不靠谱,于是自己写了几行代码,亲测...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸

地址:http://m.so.com/index.php?a=newTranscode&u=http%3A%2F%2Fwww.cnblogs.com%2Fzealotrouge%2Farchive%2...

Android 获取屏幕尺寸与密度

Android 获取屏幕尺寸与密度     遇到一个问题,我的地图浮标图片在WVGA手机上正好,在QVGA上就显的太大,所以我要根据屏幕的不同调整浮标的大小使其在QVGA大小合适。有的同...

Supporting Multiple Screens(支持Android各种屏幕尺寸)

Supporting Multiple ScreensAndroid runs on a variety of devices that offer different screen sizes an...

android 屏幕尺寸与密度

Android屏幕尺寸与密度     遇到一个问题,我的地图浮标图片在WVGA手机上正好,在QVGA上就显的太大,所以我要根据屏幕的不同调整浮标的大小使其在QVGA大小合适。有的同事提出...

android 布局如何支持多种不同屏幕尺寸

android 布局如何支持多种不同屏幕尺寸 --关于dp、layout-xxx、drawable-xxx作用的小结   转载自:http://blog.csdn.net/vincent_bl...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)