0

我目前正在开发一款游戏。我使用 DP 作为所有对象的测量值,通过 Metrics 计算回 PX。问题是,例如在我的 Nexus 7 平板电脑上,所有元素看起来都不错,尺寸完美,但在我的 Nexus 4 上它们太大了——这显然是因为 DP。

我怎样才能实现这样的目标:

对象总是屏幕宽度的 1/5?

我必须以编程方式计算新宽度吗?如果是这样,我该怎么做?我必须牢记显示器的密度和分辨率,但我无法想象我现在如何计算这个。或者有没有其他方法可以做到这一点?

顺便说一句:我在画布上绘图,所以我必须将所有这些重新计算为像素。

这是我目前使用的:

public int convertDpToPx(int dp) {
    DisplayMetrics displayMetrics = mActivity.getResources().getDisplayMetrics();
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
}
public int convertPxToDp(int px) {
    DisplayMetrics displayMetrics = mActivity.getResources().getDisplayMetrics();
    return (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_PX, px , displayMetrics);
}

例如,对象 #1 的宽度为 100dp,但在我的 4.7 英寸设备上,它占用的屏幕部分比在我的 7 英寸平板电脑上要大得多。

4

1 回答 1

1

其实很简单。通过获取 Activity 的窗口WindowManager并获取屏幕大小/指标。然后只需将您的宽度设置为View屏幕宽度的 1/5。

这里

public class World extends Activity {

int screenWidth, screenHeight;

WindowManager w;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Point size = new Point();
    w = getWindowManager();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        w.getDefaultDisplay().getSize(size);

        screenWidth = size.x;
        screenHeight = size.y;
    } else {
        Display d = w.getDefaultDisplay();
        screenWidth = d.getWidth();
        screenHeight = d.getHeight();
    }

    //here you can set the View's width to screenWidth/5
}

希望这可以帮助!

于 2013-08-17T16:55:34.467 回答