2016-08-04 6 views
0

Я сделал вид, что изображение с фиксированными размерами показывает изображение из пользовательского пункта назначения. Масштабирование и ориентация уже работают, но когда я запускаю приложение, сначала открывается первое серое окно. Когда я снова загружаю его, он показывает картинку, как это должно быть. Может кто-нибудь, пожалуйста, скажите мне, что здесь происходит и как я смогу это исправить? Я уже гугл этой проблемы, но я думаю, что это что-то делать с последовательностью, в которой мой код выполняет .. Вот мой код для показа изображения:Imageview не показывает изображение при первой попытке

public void refreshImageView(String highlight){ 
    File image; 
    if(highlight==null){ 
     image=new File(mydb.getCityById(cityId).getPicture()); 
    }else{ 
     try{ 
     image=new File(mydb.getHighlightById(highlightId).getFile()); 
     }catch(Exception e){ 
      Log.i(TAG, "There is no file saved for this highlight"); 
      image=new File(""); 
     } 
    } 
    if(image.exists()&&image.toString().endsWith(".jpg")){ 
     mImagePreview.setVisibility(View.VISIBLE); 

     int maxWidth=mImagePreview.getWidth(), maxHeight=mImagePreview.getHeight(); 
     BitmapFactory.Options options=new BitmapFactory.Options(); 
     options.inJustDecodeBounds=true; 
     BitmapFactory.decodeFile(image.getAbsolutePath(),options); 
     options.inSampleSize=calculateInSampleSize(options,maxWidth,maxHeight); 
     options.inJustDecodeBounds=false; 
     Bitmap mBitmap=BitmapFactory.decodeFile(image.getAbsolutePath(), options); 
     try{ 
      mBitmap=checkOrientation(image.getAbsolutePath(),mBitmap); 
     }catch(Exception e){ 
      Log.i(TAG, "Picture could not be rotated"); 
     } 
     Bitmap bitmapPrev=Bitmap.createBitmap(
       mBitmap.getWidth()+20, 
       mBitmap.getHeight()+20,Bitmap.Config.ARGB_8888); 

     Canvas canvas=new Canvas(bitmapPrev); 
     canvas.drawColor(R.color.black); 
     canvas.drawBitmap(mBitmap, 10,10,new Paint(Paint.FILTER_BITMAP_FLAG)); 
     mImagePreview.setImageBitmap(bitmapPrev); 
    } 
    else{ 
     mImagePreview.setVisibility(View.GONE); 
    } 
} 

//method for calculating sample size 
private static int calculateInSampleSize(BitmapFactory.Options options, int maxWidth, int maxHeight){ 
    final int height=options.outHeight,width=options.outWidth; 
    int inSampleSize=1; 

    if(height>maxHeight || width>maxWidth){ 
     final int heightRatio=Math.round((float)height/(float)maxHeight), 
       widthRatio=Math.round((float)width/(float)maxWidth); 
     inSampleSize=heightRatio < widthRatio ? heightRatio : widthRatio; 
    } 
    return inSampleSize; 
} 

//method to check orientation of picture 
private Bitmap checkOrientation(String path, Bitmap bitmap) throws IOException{ 
    ExifInterface ei = new ExifInterface(path); 
    int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); 
    switch(orientation) { 
     case ExifInterface.ORIENTATION_ROTATE_90: 
      return rotateImage(bitmap, 90); 
     case ExifInterface.ORIENTATION_ROTATE_180: 
      return rotateImage(bitmap, 180); 
     case ExifInterface.ORIENTATION_ROTATE_270: 
      return rotateImage(bitmap, 270); 
     default: 
      return bitmap; 
    } 
} 

//method to rotate image 
public static Bitmap rotateImage(Bitmap source, float angle) { 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(angle); 
    Bitmap rotated = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); 
    return rotated; 

ответ

0

Почему все это код? Изображение может позаботиться о том, что загрузка и масштабирование!

Uri uri = Uri.fromFile(file); 
imageView.setScaleType(...FIT_XY); 
imageView.setImageURI(uri); 
+0

Я знаю, но тогда изображение просматривает изображение в полном размере, прежде чем приспосабливать его к масштабу изображения. Это делает загрузку изображения очень медленной, и поэтому я сделал это так, но спасибо в любом случае. –

+0

Затем вы должны использовать библиотеку подвыборки с масштабированием изображения. Он делает все это и многое другое. Получить его на https://github.com/davemorrissey/subsampling-scale-image-view – lionscribe

Смежные вопросы