kandi background
Explore Kits

SyncLoaderBitmapDemo | a sync load bitmap int listview demo

 by   geniusgithub Java Version: Current License: No License

 by   geniusgithub Java Version: Current License: No License

Download this library from

kandi X-RAY | SyncLoaderBitmapDemo Summary

SyncLoaderBitmapDemo is a Java library. SyncLoaderBitmapDemo has no bugs, it has no vulnerabilities, it has build file available and it has low support. You can download it from GitHub.
Sync Load Image From Url For Android.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • SyncLoaderBitmapDemo has a low active ecosystem.
  • It has 58 star(s) with 35 fork(s). There are 7 watchers for this library.
  • It had no major release in the last 12 months.
  • SyncLoaderBitmapDemo has no issues reported. There are no pull requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of SyncLoaderBitmapDemo is current.
SyncLoaderBitmapDemo Support
Best in #Java
Average in #Java
SyncLoaderBitmapDemo Support
Best in #Java
Average in #Java

quality kandi Quality

  • SyncLoaderBitmapDemo has 0 bugs and 0 code smells.
SyncLoaderBitmapDemo Quality
Best in #Java
Average in #Java
SyncLoaderBitmapDemo Quality
Best in #Java
Average in #Java

securitySecurity

  • SyncLoaderBitmapDemo has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • SyncLoaderBitmapDemo code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
SyncLoaderBitmapDemo Security
Best in #Java
Average in #Java
SyncLoaderBitmapDemo Security
Best in #Java
Average in #Java

license License

  • SyncLoaderBitmapDemo does not have a standard license declared.
  • Check the repository for any license declaration and review the terms closely.
  • Without a license, all rights are reserved, and you cannot use the library in your applications.
SyncLoaderBitmapDemo License
Best in #Java
Average in #Java
SyncLoaderBitmapDemo License
Best in #Java
Average in #Java

buildReuse

  • SyncLoaderBitmapDemo releases are not available. You will need to build from source code and install.
  • Build file is available. You can build the component from source.
  • Installation instructions are not available. Examples and code snippets are available.
SyncLoaderBitmapDemo Reuse
Best in #Java
Average in #Java
SyncLoaderBitmapDemo Reuse
Best in #Java
Average in #Java
Top functions reviewed by kandi - BETA

kandi has reviewed SyncLoaderBitmapDemo and discovered the below as its top functions. This is intended to give you an instant insight into SyncLoaderBitmapDemo implemented functionality, and help decide if they suit your requirements.

  • Copy a file to a destination
    • Display image .
      • Get view
        • Gets the function name .
          • Check if the network state is connected
            • Check cache size .
              • Creates a log .
                • Clears out the image cache .
                  • Gets the cache file save path .
                    • Gets save path .

                      Get all kandi verified functions for this library.

                      Get all kandi verified functions for this library.

                      SyncLoaderBitmapDemo Key Features

                      a sync load bitmap int listview demo

                      default

                      copy iconCopydownload iconDownload
                          public class ImageLoader {
                      
                          private MemoryCache memoryCache = new MemoryCache();
                      	  private AbstractFileCache fileCache;
                      	  private Map<ImageView, String> imageViews = Collections
                      			.synchronizedMap(new WeakHashMap<ImageView, String>());
                      	// 线程池
                      	private ExecutorService executorService;
                      
                      	public ImageLoader(Context context) {
                      		fileCache = new FileCache(context);
                      		executorService = Executors.newFixedThreadPool(5);
                      	}
                      
                      	// 最主要的方法
                      	public void DisplayImage(String url, ImageView imageView, boolean isLoadOnlyFromCache) {
                      		imageViews.put(imageView, url);
                      		// 先从内存缓存中查找
                      
                      		Bitmap bitmap = memoryCache.get(url);
                      		if (bitmap != null)
                      			imageView.setImageBitmap(bitmap);
                      		else if (!isLoadOnlyFromCache){
                      
                      			// 若没有的话则开启新线程加载图片
                      			queuePhoto(url, imageView);
                      		}
                      	}
                      
                      	private void queuePhoto(String url, ImageView imageView) {
                      		PhotoToLoad p = new PhotoToLoad(url, imageView);
                      		executorService.submit(new PhotosLoader(p));
                      	}
                      
                      	private Bitmap getBitmap(String url) {
                      		File f = fileCache.getFile(url);
                      
                      		// 先从文件缓存中查找是否有
                      		Bitmap b = null;
                      		if (f != null && f.exists()){
                      			b = decodeFile(f);
                      		}
                      		if (b != null){
                      			return b;
                      		}
                      		// 最后从指定的url中下载图片
                      		try {
                      			Bitmap bitmap = null;
                      			URL imageUrl = new URL(url);
                      			HttpURLConnection conn = (HttpURLConnection) imageUrl
                      					.openConnection();
                      			conn.setConnectTimeout(30000);
                      			conn.setReadTimeout(30000);
                      			conn.setInstanceFollowRedirects(true);
                      			InputStream is = conn.getInputStream();
                      			OutputStream os = new FileOutputStream(f);
                      			CopyStream(is, os);
                      			os.close();
                      			bitmap = decodeFile(f);
                      			return bitmap;
                      		} catch (Exception ex) {
                      			Log.e("", "getBitmap catch Exception...\nmessage = " + ex.getMessage());
                      			return null;
                      		}
                      	}
                      
                      	// decode这个图片并且按比例缩放以减少内存消耗,虚拟机对每张图片的缓存大小也是有限制的
                      	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 = 100;
                      			int width_tmp = o.outWidth, height_tmp = o.outHeight;
                      			int scale = 1;
                      			while (true) {
                      				if (width_tmp / 2 < REQUIRED_SIZE
                      						|| height_tmp / 2 < 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;
                      		}
                      	}
                      
                      	class PhotosLoader implements Runnable {
                      		PhotoToLoad photoToLoad;
                      
                      		PhotosLoader(PhotoToLoad photoToLoad) {
                      			this.photoToLoad = photoToLoad;
                      		}
                      
                      		@Override
                      		public void run() {
                      			if (imageViewReused(photoToLoad))
                      				return;
                      			Bitmap bmp = getBitmap(photoToLoad.url);
                      			memoryCache.put(photoToLoad.url, bmp);
                      			if (imageViewReused(photoToLoad))
                      				return;
                      			BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad);
                      			// 更新的操作放在UI线程中
                      			Activity a = (Activity) photoToLoad.imageView.getContext();
                      			a.runOnUiThread(bd);
                      		}
                      	}
                      
                      	/**
                      	 * 防止图片错位
                      	 *
                      	 * @param photoToLoad
                      	 * @return
                      	 */
                      	boolean imageViewReused(PhotoToLoad photoToLoad) {
                      		String tag = imageViews.get(photoToLoad.imageView);
                      		if (tag == null || !tag.equals(photoToLoad.url))
                      			return true;
                      		return false;
                      	}
                      
                      	// 用于在UI线程中更新界面
                      	class BitmapDisplayer implements Runnable {
                      		Bitmap bitmap;
                      		PhotoToLoad photoToLoad;
                      
                      		public BitmapDisplayer(Bitmap b, PhotoToLoad p) {
                      			bitmap = b;
                      			photoToLoad = p;
                      		}
                      
                      		public void run() {
                      			if (imageViewReused(photoToLoad))
                      				return;
                      			if (bitmap != null)
                      				photoToLoad.imageView.setImageBitmap(bitmap);
                      
                      		}
                      	}
                      
                      	public void clearCache() {
                      		memoryCache.clear();
                      		fileCache.clear();
                      	}
                      
                      	public static void CopyStream(InputStream is, OutputStream os) {
                      		final int buffer_size = 1024;
                      		try {
                      			byte[] bytes = new byte[buffer_size];
                      			for (;;) {
                      				int count = is.read(bytes, 0, buffer_size);
                      				if (count == -1)
                      					break;
                      				os.write(bytes, 0, count);
                      			}
                      		} catch (Exception ex) {
                      			Log.e("", "CopyStream catch Exception...");
                      		}
                      	}
                          }
                      
                      
                      Feature
                      ------------------------------
                      The first load from memory , if you can't get it then open the thread from the SD card or network ,
                      where attention to get pictures from the SD card on child thread ,
                      otherwise rapid slide screen , then would not smooth , and this is to optimize a .
                      At the same time , in the adapter busy variable indicates the listview whether in the sliding state sliding state obtained only from the memory ,
                      if not then no need to reopen the thread to external memory or network access to picture this is to optimize the two .
                      ImageLoader thread using a thread pool , so as to avoid excessive thread frequently create and destroy ,
                      some children's shoes every time always new thread to perform which is very undesirable ,
                      a little better with the AsyncTask class , in fact, also the internal use the thread pool .
                      Get pictures from the network , first save it to the sd card , and then loaded into memory ,
                      the benefits of doing so can be loaded into memory compression processing to reduce pictures to share memory which is optimized three .
                      
                      
                      ### Links
                      csdn bolg : [http://blog.csdn.net/geniuseoe2012](http://blog.csdn.net/geniuseoe2012)<br />
                      
                      
                      
                      ### Development
                      If you think this article useful Nepal , please pay attention to me,
                      Your support is my motivation, I will continue to strive to do better

                      Community Discussions

                      No Community Discussions are available at this moment for SyncLoaderBitmapDemo.Refer to stack overflow page for discussions.

                      No Community Discussions are available at this moment for SyncLoaderBitmapDemo.Refer to stack overflow page for discussions.

                      Community Discussions, Code Snippets contain sources that include Stack Exchange Network

                      Vulnerabilities

                      No vulnerabilities reported

                      Install SyncLoaderBitmapDemo

                      You can download it from GitHub.
                      You can use SyncLoaderBitmapDemo like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the SyncLoaderBitmapDemo component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

                      Support

                      For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .

                      DOWNLOAD this Library from

                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      Share this Page

                      share link
                      Consider Popular Java Libraries
                      Try Top Libraries by geniusgithub
                      Compare Java Libraries with Highest Support
                      Compare Java Libraries with Highest Quality
                      Compare Java Libraries with Highest Security
                      Compare Java Libraries with Permissive License
                      Compare Java Libraries with Highest Reuse
                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      • © 2022 Open Weaver Inc.