关闭

转换dp单位为像素单位

537人阅读 评论(0) 收藏 举报
分类:

在某些情况下,需要用dp来表示尺寸,然后把他们转换为像素。想象一下,在应用程序中滚动或者扔的手势在用户的手指划过至少16像素后才能被识别出。在基准屏幕上,在手势被识别出来之前,用户必须划过16像素除160dpi,这等于十分之一英寸(或者2.5毫米)。在一个高密度屏幕(240dpi)设备上,用户必须划过16像素除240dpi,即十五分之一英寸(或者1.7毫米)。这个距离相当短,因此对用户来说,程序看上去更加敏感。

要解决这个问题,手势阈值必须用dp表示,然后转换成实际的像素。例如:

 
// The gesture threshold expressed in dp
private static final float GESTURE_THRESHOLD_DP = 16.0f;
 
// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);
 
// Use mGestureThreshold as a distance in pixels...
 

根据当前屏幕密度,DisplayMetrics.density指定了你必须使用的将dp单位转为像素单位的比例因子。在一个中等密度屏幕上,DisplayMetrics.density等于1.0;在高密度屏幕上,DisplayMetrics.density等于1.5;在一个超高密度屏幕上,DisplayMetrics.density等于2.0;在低密度屏幕上,DisplayMetrics.density等于0.75.这个比例因子乘以dp单位得到的值就是当前屏幕的实际像素值(然后添加0.5f做四舍五入,转化的整数)。更多信息,请参看DisplayMetrics类。

然而,不是为这里事件定义任意阈值,而是你应该使用预先调整的可从ViewConfiguration获取的配置值。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24139次
    • 积分:202
    • 等级:
    • 排名:千里之外
    • 原创:95篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档