답변:
디스플레이 배율을 사용하여 dps에서 픽셀로 변환해야합니다.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
에 px
? 감사.
나는 이것이 오래된 질문이라는 것을 알고 있지만이 전환을 수행하는 훨씬 더 깔끔한 방법을 찾았습니다.
자바
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
코 틀린
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
위의 당신이 PX로 전환시키려는 DP 값입니다
요구 사항을 살펴보면 대체 솔루션도 있습니다. 컴파일 타임에 dp의 크기를 알고 있으므로 리소스에 dimen 항목을 추가 할 수 있습니다. 그런 다음 dimen 항목을 쿼리하면이 호출에서 자동으로 픽셀로 변환됩니다.
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
그리고 dimens.xml에는 다음이 있습니다.
<dimen name="dimen_entry_in_dp">72dp</dimen>
이 아이디어를 확장하면 1dp 또는 1sp의 값을 dimen 항목으로 저장하고 값을 쿼리하여 승수로 사용할 수 있습니다. 이 방법을 사용하면 수학 자료에서 코드를 격리하고 라이브러리를 사용하여 계산을 수행합니다.
테스트 된 가장 간단한 방법 (및 API 1에서도 작동)은 다음과 같습니다.
getResources().getDimensionPixelSize(R.dimen.example_dimen);
설명서에서 :
원시 픽셀의 크기로 사용하기 위해 특정 자원 ID의 차원을 검색하십시오. 이것은 반환 값이 정수 픽셀로 변환되어 사이즈로서 사용되는 것을 제외하고는 getDimension (int)와 같습니다. 크기 변환은 기본 값을 반올림하고 0이 아닌 기본 값이 적어도 하나의 픽셀 크기인지 확인합니다.
예, 값을 반올림하지만 그리 나쁘지는 않습니다 (hdpi 및 ldpi 장치의 홀수 값에서만 ldpi가 그리 일반적이지 않은 경우 약간의 값을 추가해야 함) 4dp를 16 (픽셀)로 변환하는 xxhdpi 장치에서 테스트했으며 진실.