Note that there are some explanatory texts on larger screens.

plurals
  1. POSlow Loading of images into Galleryview and app gets stuck while scrolling
    primarykey
    data
    text
    <p>I want to load the High Quality images into GalleryView using the Adapter mentioned below</p> <p>I am also using the Universal Image Loader class and some other classes like FileCache,MemoryCache but still My images are loading very slowly in my GalleryView.</p> <p>By observations I understood that images I am loading are very high resolution,I tried with scaling images like below</p> <pre><code> final int REQUIRED_SIZE=150; instead of final int REQUIRED_SIZE=HomeActivity.width;//scaling upto device width so that I can get high quality images int width_tmp=o.outWidth, height_tmp=o.outHeight; int scale=1; while(true){ if(width_tmp/2&lt;REQUIRED_SIZE || height_tmp/2&lt;REQUIRED_SIZE) break; width_tmp/=2; height_tmp/=2; scale*=2; } </code></pre> <p>Please suggest for fast loading of High Quality images in my GalleryView </p> <p>My Adapter:</p> <pre><code> private ImageLoaderNew imageLoader; imageLoader = new ImageLoaderNew(getApplicationContext()); public class SearchAdapter extends ArrayAdapter&lt;String&gt;{ private List&lt;String&gt;galleriesadp = new ArrayList&lt;String&gt;(); int resId; private LayoutInflater inflater; Context context; public SearchAdapter(Context context, int resId, List&lt;String&gt; galleriesadp){ super(context, resId, galleriesadp); this.resId = resId; this.context=context; this.galleriesadp=galleriesadp; } @Override public View getView(final int position, View convertView, ViewGroup parent123) { // View v = convertView; Log.e("postion &gt;&gt;&gt;",""+position); LayoutInflater inflator = ((Activity) context).getLayoutInflater(); View itemView = inflator.inflate(resId, null); ImageView image = (ImageView)itemView.findViewById(R.id.image); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); image.setLayoutParams(layoutParams); try{ imageLoader .DisplayImg( galleriesadp.get(position).replace(" ", "%20"), image); } catch(Exception e){ e.printStackTrace(); } return itemView; } } </code></pre> <p>My Image Loader class :</p> <pre><code> public class ImageLoaderNew { MemoryCache memoryCache=new MemoryCache(); FileCache fileCache; public static Drawable d ; Context c; private Map&lt;ImageView, String&gt; imageViews=Collections.synchronizedMap(new WeakHashMap&lt;ImageView, String&gt;()); public ImageLoaderNew(Context context){ //Make the background thead low priority. This way it will not affect the UI performance this.c=context; photoLoaderThread.setPriority(Thread.NORM_PRIORITY-1); fileCache=new FileCache(context); } // final int stub_id=R.drawable.stub; public void DisplayImage(String url, ImageView imageView) { memoryCache.put(url, getBitmap(url)); imageViews.put(imageView, url); Bitmap bitmap=memoryCache.get(url); if(bitmap!=null) { Log.e("bitmap_width",""+bitmap.getWidth()); Log.e("bitmap_height",""+bitmap.getHeight()); // imageView.setBackgroundDrawable(new BitmapDrawable(bitmap)); imageView.setImageBitmap(bitmap); Log.v("first", "first"); } else { queuePhoto(url, imageView); Log.v("second", "second"); } } @SuppressWarnings("deprecation") @SuppressLint("NewApi") public void DisplayImageNew(String url,ImageView imageView, RelativeLayout rlayout) { memoryCache.put(url, getBitmap(url)); imageViews.put(imageView, url); Bitmap bitmap=memoryCache.get(url); if(bitmap!=null) { d = new BitmapDrawable(c.getResources(),bitmap); rlayout.setBackgroundDrawable(d); // imageView.setBackgroundDrawable(new BitmapDrawable(bitmap)); // imageView.setImageBitmap(bitmap); Log.v("first", "first"); } else { queuePhoto(url, imageView); Log.v("second", "second"); } } public void DisplayImg(String url, ImageView imageView) { imageViews.put(imageView, url); Bitmap bitmap=memoryCache.get(url); if(bitmap!=null) { imageView.setBackgroundDrawable(new BitmapDrawable(bitmap)); // imageView.setImageBitmap(getRoundedCornerBitmap( bitmap, 0,70,70)); Log.v("first", "first"); } else { queuePhoto(url, imageView); Log.v("second", "second"); } } private void queuePhoto(String url, ImageView imageView) { //This ImageView may be used for other images before. So there may be some old tasks in the queue. We need to discard them. photosQueue.Clean(imageView); PhotoToLoad p=new PhotoToLoad(url, imageView); synchronized(photosQueue.photosToLoad){ photosQueue.photosToLoad.push(p); photosQueue.photosToLoad.notifyAll(); } //start thread if it's not started yet if(photoLoaderThread.getState()==Thread.State.NEW) photoLoaderThread.start(); } private Bitmap getBitmap(String url) { File f=fileCache.getFile(url); //from SD cache Bitmap b = decodeFile(f); if(b!=null) return b; //from web try { Bitmap bitmap=null; URL imageUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection(); conn.setConnectTimeout(30000); conn.setReadTimeout(30000); InputStream is=conn.getInputStream(); OutputStream os = new FileOutputStream(f); Utils.CopyStream(is, os); os.close(); bitmap = decodeFile(f); return bitmap; } catch (Exception ex){ ex.printStackTrace(); return null; } }//Lalit //decodes image and scales it to reduce memory consumption private Bitmap decodeFile(File f){ try { //decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f),null,o); //Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE=HomeActivity.width; //Testing Log.e("device width",""+HomeActivity.width); Log.e("bitmap width",""+o.outWidth); Log.e("bitmap height",""+o.outHeight); int width_tmp=o.outWidth, height_tmp=o.outHeight; int scale=1; while(true){ if(width_tmp/2&lt;REQUIRED_SIZE || height_tmp/2&lt;REQUIRED_SIZE) break; width_tmp/=2; height_tmp/=2; scale*=2; } //decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize=scale; return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) {} return null; } //Task for the queue private class PhotoToLoad { public String url; public ImageView imageView; public PhotoToLoad(String u, ImageView i){ url=u; imageView=i; } } PhotosQueue photosQueue=new PhotosQueue(); public void stopThread() { photoLoaderThread.interrupt(); } //stores list of photos to download class PhotosQueue { private Stack&lt;PhotoToLoad&gt; photosToLoad=new Stack&lt;PhotoToLoad&gt;(); //removes all instances of this ImageView public void Clean(ImageView image) { for(int j=0 ;j&lt;photosToLoad.size();){ if(photosToLoad.get(j).imageView==image) photosToLoad.remove(j); else ++j; } } } class PhotosLoader extends Thread { public void run() { try { while(true) { //thread waits until there are any images to load in the queue if(photosQueue.photosToLoad.size()==0) synchronized(photosQueue.photosToLoad){ photosQueue.photosToLoad.wait(); } if(photosQueue.photosToLoad.size()!=0) { PhotoToLoad photoToLoad; synchronized(photosQueue.photosToLoad){ photoToLoad=photosQueue.photosToLoad.pop(); } Bitmap bmp=getBitmap(photoToLoad.url); memoryCache.put(photoToLoad.url, bmp); String tag=imageViews.get(photoToLoad.imageView); if(tag!=null &amp;&amp; tag.equals(photoToLoad.url)){ BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad.imageView); Activity a=(Activity)photoToLoad.imageView.getContext(); a.runOnUiThread(bd); } } if(Thread.interrupted()) break; } } catch (InterruptedException e) { //allow thread to exit } } } PhotosLoader photoLoaderThread=new PhotosLoader(); //Used to display bitmap in the UI thread class BitmapDisplayer implements Runnable { Bitmap bitmap; ImageView imageView; public BitmapDisplayer(Bitmap b, ImageView i){bitmap=b;imageView=i;} public void run() { if(bitmap!=null) imageView.setBackgroundDrawable(new BitmapDrawable(bitmap)); } } public void clearCache() { memoryCache.clear(); fileCache.clear(); } public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels,int width,int height) { Bitmap output = Bitmap.createBitmap(width,height, Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } // public void DisplayImage(String replaceAll, ImageView img) { // // TODO Auto-generated method stub // // } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload