2013-08-17 1 views
0

현재 게임을 개발 중입니다. 나는 모든 객체의 측정 값으로 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의 폭을 가지고 있지만 내 7에 대한보다 내 4.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

관련 문제