2013-08-17 84 views
0

我目前正在開發一款遊戲。我使用DP作爲所有對象的度量,通過度量計算回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寸平板電腦。

回答

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 
} 

希望這有助於!

+0

嗯,我覺得我不得不保持屏幕的密度和所有這些東西,但我想你是對的,就這麼簡單。謝謝 – damian

+0

是的,容易如此:)你也可以在dimen.xml中指定像素單元在這裏查看我的答案,看看是否可以幫助。 http://stackoverflow.com/questions/18027054/use-density-independent-pixels-for-width-and-height-when-creating-a-bitmap/18028587#18028587快樂編碼! – MattMatt

相關問題