阅读Android开发人员Supporting Multiple Screens后,我似乎非常困惑。我认为dpi是每个受尊重屏幕上的像素数量,以使渲染对象在每个屏幕上显示相同。那么,在某种程度上这意味着dpi基本上是屏幕的百分比?例如,如果我向南方向移动一个对象10dp,这基本上是将对象移动到屏幕南方的百分比吗?
我还认为dp是中等大小屏幕的像素缩放版本。那么这是否意味着每个Android设备都具有相同的dp屏幕大小?
一些背景信息:
我正在尝试开发游戏。在这个游戏中,物体正在从屏幕上掉下来。因此,我希望这些对象看起来像是在每个Android设备上以相对相同的速度下降并在屏幕上移动。任何提示或信息可以帮助我走上正轨,或者我的方法是什么?
我用于转化的当前方法:
public static int dpToPx(Context context, float dp) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
return px;
}
public static int pxToDp(Context context, float px) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int dp = Math.round(px / (displayMetrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
return dp;
}
答案 0 :(得分:1)
我要做的是获取设备的宽度和高度,然后使用它的分数,那么它将在所有设备上相同
在这里我得到了这个网站,也许它会派上用场
xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp
Generalised Dpi values for screens:
ldpi Resources for low-density (ldpi) screens (~120dpi)
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra high-density (xhdpi) screens (~320dpi).
Therefore generalised size of your resources (assuming they are full screen):
ldpi
Vertical = 426 * 120 / 160 = 319.5px
Horizontal = 320 * 120 / 160 = 240px
mdpi
Vertical = 470 * 160 / 160 = 470px
Horizontal = 320 * 160 / 160 = 320px
hdpi
Vertical = 640 * 240 / 160 = 960px
Horizontal = 480 * 240 / 160 = 720px
xhdpi
Vertical = 960 * 320 / 160 = 1920px
Horizontal = 720 * 320 / 160 = 1440px
px = dp*dpi/160
答案 1 :(得分:1)