Out of Memory Exception while scroll Listview?

前端 未结 6 1068
温柔的废话
温柔的废话 2020-12-18 15:36

I refered through many resources but can\'t get right answer,

I have made an custom adapter to view images in a listview. This images are retrieved from memory card.

6条回答
  •  眼角桃花
    2020-12-18 16:37

    use this concept this will help you, After that set the imagebitmap on image view

    public static Bitmap convertBitmap(String path)   {
    
            Bitmap bitmap=null;
            BitmapFactory.Options bfOptions=new BitmapFactory.Options();
            bfOptions.inDither=false;                     //Disable Dithering mode
            bfOptions.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be cleared
            bfOptions.inInputShareable=true;              //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
            bfOptions.inTempStorage=new byte[32 * 1024]; 
    
    
            File file=new File(path);
            FileInputStream fs=null;
            try {
                fs = new FileInputStream(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    
            try {
                if(fs!=null)
                {
                    bitmap=BitmapFactory.decodeFileDescriptor(fs.getFD(), null, bfOptions);
                }
                } catch (IOException e) {
    
                e.printStackTrace();
            } finally{ 
                if(fs!=null) {
                    try {
                        fs.close();
                    } catch (IOException e) {
    
                        e.printStackTrace();
                    }
                }
            }
    
            return bitmap;
        }
    

    If you want to make a small image from large image with height and width like 60 and 60 and scroll the listview fast then use this concept

    public static Bitmap decodeSampledBitmapFromPath(String path, int reqWidth,
                int reqHeight) {
    
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(path, options);
    
            options.inSampleSize = calculateInSampleSize(options, reqWidth,
                    reqHeight);
    
            // Decode bitmap with inSampleSize set
            options.inJustDecodeBounds = false;
            Bitmap bmp = BitmapFactory.decodeFile(path, options);
            return bmp;
            }
    
        public static int calculateInSampleSize(BitmapFactory.Options options,
                int reqWidth, int reqHeight) {
    
            final int height = options.outHeight;
            final int width = options.outWidth;
            int inSampleSize = 1;
    
            if (height > reqHeight || width > reqWidth) {
                if (width > height) {
                    inSampleSize = Math.round((float) height / (float) reqHeight);
                } else {
                    inSampleSize = Math.round((float) width / (float) reqWidth);
                 }
             }
             return inSampleSize;
            }
    

    I hope it will help you much.

    You cam take help from developer site Here

提交回复
热议问题