android学习5#--自定义View之坐标系统

本文介绍了在Android开发中,如何理解View的坐标系统,包括独立像素(dp)与像素(px)的关系。通过实例,展示了如何在布局中定位View,并解析了在不同阶段获取坐标的有效性。最后,提到了触摸点坐标的设计和相关参考资料。
摘要由CSDN通过智能技术生成

近期在学习android过程中,看到有人在伯乐在线上分享如何开发自定义View的一系列文章。我觉得对于初学者,很有必要掌握它,因为今后很多时候系统自带的组件不足以满足我们的功能需求,那么我们就要根据需求来定义一个能满足我们需求的View组件。
但是我并不会按照伯乐在线的系列文章来学习,就记录我是怎么学的,今天来讲讲我对坐标的理解。参考:伯乐在线[安卓自定义View基础:坐标系]

Android移动设备的坐标一般定义屏幕左上角为坐标原点,与我们平时理解的坐标系统不一样的是:平时所理解的坐标Y轴向上增大,而Android移动设备是向下增长的

独立像素(dp)和像素(px)

在讲View的坐标系统前首先需要掌握android中的dp与px之间的关系。
在开发过程中,肯定要给组件布局定位的,而android有两个常用计量单位独立像素(dp)和像素(px)。
px:因为pixel的缩写,它表示一个实实在在的物理像素。他不会随设备的分辨率改变而改变。
dp/dip:英文device independent pixels的简称,翻译成中文叫设备独立像素,为什么要有dp出来呢,因为我们的移动设备分辨率是有多种的,那么为了让应用中的view组件能够自适应各种分辨率的显示设备,于是乎就产生了dp。提高了程序的可移植性,因为android最终会将dp转成具体设备的像素数。最终是如何转换成px 的呢?先看下面的公式:

    public static int dip2px(Context context, float dipValue){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dipValue * scale + 0.5f);
    }

上面的公式中出现了一个density,呵呵,又是一个新东西。不怕,找度娘,density表示每英寸有多少个显示点。但是我写了一个应用打印这个值为2.625,而我的屏幕实际density值为420。咦,为何不一样啊,这个问题困扰了我不少时间,估计大家也晕了,先不管,我们一个一个来,先来看看android是如何定义这里的density,如下:

    /**
     * The logical density of the display.  This is a scaling factor for the
     * Density Independent Pixel unit, where one DIP is one pixel on an
     * approximately 160 dpi screen (for example a 240x320, 1.5"x2" screen), 
     * providing the baseline of the system's display. Thus on a 160dpi screen 
     * this density value will be 1; on a 120 dpi screen it would be .75; etc.
     *  
     * <p>This value does not exactly follow the real screen size (as given by 
     * {@link #xdpi} and {@link #ydpi}, but rather is used to scale the size of
     * the overall UI in steps based on gross changes in the display dpi.  For 
     * example, a 240x320 screen will have a density of 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值