2011-12-20 3 views
4

어떤 화면 크기에서도 작동해야하는 그래픽 응용 프로그램을 개발하려면 약간의 생각이 필요합니다. 일반적으로 화면에 맞게 고해상도 그래픽과 눈금을 만듭니다.android 비트 맵 - 모범 사례

내가 밀도 (DP) 작업을 시도하지만, 그 다음 다른 내 그래픽을 확장 할 수있는 더 좋은 방법을 찾을 수 없습니다 내가 를 사용하여 솔루션을 사용하여 더 복잡한 것 같다 "실제 픽셀" 의 사용을 피하는 추천을 본 적이

나는 내 이미지의 크기를 조절하는 데이 클래스를 생성 장치 화면 (실제 픽셀)

를 사용하는이 (여전히 장치가 다른 종횡비가) 내 대부분의 문제를 해결하고 잘 작동하는 것 같다 (실제 픽셀 기준) .

public class BitmapHelper { 
    // Scale and keep aspect ratio 
    static public Bitmap scaleToFitWidth(Bitmap b, int width) { 
     float factor = width/(float) b.getWidth(); 
     return Bitmap.createScaledBitmap(b, width, (int) (b.getHeight() * factor), false); 
    } 

    // Scale and keep aspect ratio  
    static public Bitmap scaleToFitHeight(Bitmap b, int height) { 
     float factor = height/(float) b.getHeight(); 
     return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factor), height, false); 
    } 

    // Scale and keep aspect ratio 
    static public Bitmap scaleToFill(Bitmap b, int width, int height) { 
     float factorH = height/(float) b.getWidth(); 
     float factorW = width/(float) b.getWidth(); 
     float factorToUse = (factorH > factorW) ? factorW : factorH; 
     return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorToUse), (int) (b.getHeight() * factorToUse), false); 
    } 

    // Scale and dont keep aspect ratio 
    static public Bitmap strechToFill(Bitmap b, int width, int height) { 
     float factorH = height/(float) b.getHeight(); 
     float factorW = width/(float) b.getWidth(); 
     return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorW), (int) (b.getHeight() * factorH), false); 
    } 
} 

내 질문은 :

  1. "실제 픽셀"을 피하는 이유는

    을 권장?
  2. 것은 내가이 방법
  3. 을 사용할 때 알고 있어야 내가 사용하는 방법 또는 무엇을 사용하는 단점은 무엇입니까 화면에 비트 맵을 확장의 가장 좋은 방법은 무엇 (환영 다음 더 많은 튜토리얼 의 좋은 기사입니다)입니다 귀하의 조언에 대한

감사

나는 (그것이 어떤 차이를 만들 경우) 나는 보통

+0

[http] : //stackoverflow.com/a/823966/556337). 비트 맵 – teoREtik

답변

0
    ,369 내 애플 리케이션을위한 서피스 뷰 SurfaceView를 사용하는 것이 언급하는 것을 잊었다 [편집]
  1. 절대 앱 픽셀을 완벽하게 만들지 마세요. 다른 해상도에서는 작동하지 않습니다. 좋은 확장 가능한 레이아웃을 만들 때 안드로이드가 당신을 위해 이미지 크기를 다루는 방식은 필요하지 않습니다. 리소스 한정자 (drawable-ldp 폴더, drawable-mdp 폴더, ..etc)를 사용하여 모든 dpi 유형의 이미지를 만들고 리소스에서 분리해야합니다.
  2. 안드로이드는 이 일을 너에게해라. Android가 비트 맵을 조정하는 방식에 영향을 미칠 수 있습니다. http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType
  3. Android에서 올바른 크기를 계산합니다. 이렇게하면 화면에서 모든 것을 시도하고 얻으려면 모든 수학을 직접 수행 할 필요가 없습니다. 모든 종류의 기기에서 실행되는 우수한 앱을 만드는 데는 여러 세트의 드로어 블 및 여러 레이아웃 (가로/세로, 소형/대형 스크린)을 만드는 데 많은 노력이 필요합니다.
+0

ByteArrays 스마트 디코딩의 질문에 도움이 될 것입니다. 내가 언급하는 것을 깜빡 한 것 같아요. 나는 현재 SurfaceView를 사용하고 있습니다. 그거야? – Nir

+0

좋아, 나는 결코 "완벽한 애플 리케이션 픽셀 픽셀"을 이해합니다. 올바른 방법을 잘 모르겠다. 예를 들어 내 장치의 해상도 인 이미지 800x480을 만들었습니다. 그런 다음 DecodeBitmap ()을 사용하여로드하지만 "android"는 내 이미지가 1200x720으로 자동 조정됩니다. 이는 내 생각에 잘못된 결정입니다. 왜? 자동 스케일링을 어떻게 신뢰할 수 있습니까? – Nir

+0

800x480은 화면에 적합하지만 다른 휴대 전화 및 태블릿에는 적합하지 않습니다. XML 레이아웃에서는 다양한 종류의 레이아웃 유형 (RelativeLayout, LinearLayout, TableLayout 등)을 사용해야하며 DP로 차원을 제공하거나 fill_parent 또는 wrap_content를 사용해야합니다. 필요한 경우 체중을 추가 할 수 있습니다. 다음 기사를 읽어주십시오. http://developer.android.com/reference/android/view/View.html – Jordi