我正在开发一款游戏。我使用DP作为所有对象的测量值,通过度量标准计算回PX。问题是,例如在我的Nexus 7平板电脑上,所有元素看起来都很好,它们具有完美的尺寸,但在我的Nexus 4上它们太大了 - 这显然是因为DP。
我怎样才能实现这样的目标:
对象总是屏幕宽度的1/5?
我是否必须以编程方式计算新宽度?如果是这样,我该怎么做?我必须记住显示器的密度和分辨率,但我无法想象我现在如何计算它。或者还有其他方法可以实现这一目标吗?
BTW:我正在使用Canvas,所以我必须将所有这些重新计算为像素。
这是我目前使用的:
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英寸平板电脑要大得多。
答案 0 :(得分:1)
实际上很简单。通过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
}
希望这有帮助!