如何在Android中将像素转换为dip(独立像素密度)

6
在我的Android应用程序中,我有像素(69像素),需要将这些像素转换为dip(密度独立像素)。 有什么建议吗?
3个回答

10

只需将像素值除以DisplayMetrics.density。


哪个是正确的:像@Khushboo的例子一样,是除法还是乘法? - John Lehmann
1
除法。@Khushboo展示的公式将dp转换为px。在xhdpi显示器上,DisplayMetrics.density == 2.0f。由于在mdpi显示器上1 dp == 1 px,在xhdpi显示器上1 dp == 2 px,因此您需要进行除法运算来将dp转换为px,而不是反过来。 - Romain Guy

7

希望这个对您有所帮助。

Resources r = getResources();
float dp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 69, r.getDisplayMetrics());

2
不,它正在提供相同的值。我的意思是像素的值作为dip。 - user1195614

7
你可以尝试这个:
public int convertDiptoPx(int pixel){

    float scale = getResources().getDisplayMetrics().density;
    int dips=(int) ((pixel * scale) + 0.5f);
    logMessage("Px=" +pixel+"  DipValue="+dips );   
    return dips;
}

编辑后:

public int convertPxtoDip(int pixel){
    //获取屏幕密度比例
    float scale = getResources().getDisplayMetrics().density;
    //根据比例将像素转化为dip
    int dips=(int) ((pixel / scale) + 0.5f);
    return dips;
}

我现在已经编辑过代码了。可惜的是,我错误地发布了相反转换的答案。 - Khushboo
您可以在此网站上检查转换结果:http://labs.skinkers.com/content/android_dp_px_calculator/。 - Khushboo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接