0

Android 앱의 확장 파일을 구현하는 중입니다.Android 확장 파일의 이미지가 너무 작게 표시됩니다.

지금까지 필자는 주 확장 파일에 여러 개의 이미지 및 오디오 파일을 배치했습니다 (패치 확장 파일을 사용하지 않습니다). 파일 중 압축 된 파일이 없습니다.

앱을 통해 확장 파일을 다운로드하고 아무런 문제없이 오디오 파일을 재생할 수 있습니다. 확장 파일의 오디오 파일이 재생되는 동시에 확장 파일의 이미지가 표시됩니다. 그러나 이미지는 예상보다 훨씬 작습니다.

이미지는 320x400 픽셀입니다. 확장 파일을 구현하기 전에 내 응용 프로그램에 예상대로 표시되었습니다. 그러나 구현 후에는 이미지가 약 50 픽셀 너비로 축소되었습니다 (높이가 축소됨).

그런 다음 How to create a drawable from a stream without resizing it에 제공된 솔루션을 시도했습니다. 이미지가 약간 큰 것처럼 보이지만, 원하는 이미지보다 훨씬 작습니다 (현재 약 100x125 픽셀 인 것처럼 보입니다). 현재 이미지를 표시하는 코드는 다음과 같습니다.

public void displayImageFromExpansionFile(){ 
    Bitmap b = BitmapFactory.decodeStream(fileStream); 
    b.setDensity(Bitmap.DENSITY_NONE); 
    Drawable d = new BitmapDrawable(this.getResources(), b); 
    imageToDisplay.setImageDrawable(d); 
} 

public void showImg(int imgNum){ 
    switch(imgNum){ 
     case(1): 
      try{ 
       if((getResources().getConfiguration().screenLayout & 
         Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL){ 
        fileStream = expansionFile.getInputStream("filepath inside expansion file for small image"); 
       } 
       else if((getResources().getConfiguration().screenLayout & 
         Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){      
        fileStream = expansionFile.getInputStream("filepath inside expansion file for normal image"); 
       } 
       else if((getResources().getConfiguration().screenLayout & 
         Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE){ 
        fileStream = expansionFile.getInputStream("filepath inside expansion file for large image"); 
       } 
       else{ 
        fileStream = expansionFile.getInputStream("filepath inside expansion file for xlarge image"); 
       } 
       displayImageFromExpansionFile(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      }   
      break; 
     // more cases here 
} 

이미지가 실제 크기로 표시되지 않는 것 같습니다. 확장 파일 내부의 이미지를 살펴보면 여전히 320x400 픽셀임을 알 수 있습니다. 그러나 앱은 이러한 크기로 이미지를 표시하지 않습니다.

앱이 올바른 크기로 이미지를 표시하도록하려면 어떻게해야합니까?

감사합니다.

--- UPDATE ---

는 또한 결과에 어떠한 차이, 아래의 코드를 시도했습니다. 원래 크기와 같이 여전히 320x400 픽셀이 아닌 약 100x125 픽셀로 보입니다. 지금까지 일한 것

public void displayImageFromExpansionFile(int bWidth, int bHeight){ 
    BitmapFactory.Options bfo = new BitmapFactory.Options(); 
    bfo.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    Bitmap b = BitmapFactory.decodeStream(fileStream, null, bfo); 
    b.setDensity(Bitmap.DENSITY_NONE); 
    imageToDisplay.setImageBitmap(b); 
} 

유일한 것은 예상 된 크기로 이미지를 위의 방법을 제공하여 (640x800 픽셀로) 이미지의 원래 크기를 두 배로, 내 휴대 전화에 Bitmap.createScaledBitmap(b, bWidth, bHeight, true);

,하지만 난 것 이미지가 다른 휴대폰에서 다른 크기로 나타날 수 있다고 상상해보십시오 (아마도 화면 밀도/크기로 인해). xlarge 이미지 크기를 두 배로 늘리고 태블릿에서 볼 때 이미지가 더 커야합니다.

답변

3

결국 나는 축소 된 이미지를 표시하는 레이아웃 XML 파일을 둘러 보았습니다.

  • 너비/높이 : fill_parent (모두)

  • 스케일 유형 : fitCenter

지금, 이미지가 나보다 약간 더 큰 그래서 같은 이미지 뷰의 속성을 변경 처음에 예상 했었지만이 방법이 더 좋아 보인다. 이제 이미지의 크기는 일정합니다. 문제 해결됨!

내가 겪어 본 일에 다른 사람이 문제가있는 경우이 도움이되기를 바랍니다.

0

그게 전부는 나를 위해 일한 : = 도움이

public static Bitmap getBitmapExt(Context context, String name){ 

    Bitmap bitmap = null; 

    try { 

     if(expansionFile == null){ 
      PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); 
      expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, pInfo.versionCode, 0); 
     } 

     InputStream is = expansionFile.getInputStream("images/" + name + ".png"); 
     bitmap = BitmapFactory.decodeStream(is); 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 

    return bitmap; 
} 

https://gist.github.com/uebi-belli/3c07323c8055a3b66ccac0d388b2b013

희망)

관련 문제