转换dp单位为像素单位

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

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

  // The gesture threshold expressed in dp 
private static final floatGESTURE_THRESHOLD_DP = 16.0f;   // Get the screen's density scale final floatscale = 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获取的配置值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值