Home
› Uncategorized
The example "Caching Bitmaps with LruCache" provide a example to Apply LruCache on Gallery. This exercise is GridView version using LruCache.
Reference: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#memory-cache
To using android.util.LruCache in the code, targetSdkVersion of "13" is needed to be specified in AndroidManifest.xml.
The layout file, refer to the post "GridView loading photos from SD Card".
Download the files.
Reference: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#memory-cache
To using android.util.LruCache in the code, targetSdkVersion of "13" is needed to be specified in AndroidManifest.xml.
The layout file, refer to the post "GridView loading photos from SD Card".
package com.example.androidgridview; import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.LruCache; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity { public class ImageAdapter extends BaseAdapter { private Context mContext; ArrayList<String> itemList = new ArrayList<String>(); public ImageAdapter(Context c) { mContext = c; } void add(String path){ itemList.add(path); } @Override public int getCount() { return itemList.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { // if it's not recycled, initialize some attributes imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(220, 220)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } //Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220, 220); // Use the path as the key to LruCache final String imageKey = itemList.get(position); final Bitmap bm = getBitmapFromMemCache(imageKey); if (bm == null){ BitmapWorkerTask task = new BitmapWorkerTask(imageView); task.execute(imageKey); }; imageView.setImageBitmap(bm); return imageView; } public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) { Bitmap bm = null; // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; bm = BitmapFactory.decodeFile(path, options); return bm; } public int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) { // Raw height and width of image 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; } class BitmapWorkerTask extends AsyncTask<String, Void, Bitmap>{ private final WeakReference<ImageView> imageViewReference; public BitmapWorkerTask(ImageView imageView) { // Use a WeakReference to ensure the ImageView can be garbage collected imageViewReference = new WeakReference<ImageView>(imageView); } @Override protected Bitmap doInBackground(String... params) { final Bitmap bitmap = decodeSampledBitmapFromUri(params[0], 200, 200); addBitmapToMemoryCache(String.valueOf(params[0]), bitmap); return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { if (imageViewReference != null && bitmap != null) { final ImageView imageView = (ImageView)imageViewReference.get(); if (imageView != null) { imageView.setImageBitmap(bitmap); } } } } } ImageAdapter myImageAdapter; private LruCache<String, Bitmap> mMemoryCache; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GridView gridview = (GridView) findViewById(R.id.gridview); myImageAdapter = new ImageAdapter(this); gridview.setAdapter(myImageAdapter); String ExternalStorageDirectoryPath = Environment .getExternalStorageDirectory() .getAbsolutePath(); String targetPath = ExternalStorageDirectoryPath + "/test/"; Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show(); File targetDirector = new File(targetPath); File[] files = targetDirector.listFiles(); for (File file : files){ myImageAdapter.add(file.getAbsolutePath()); } // Get memory class of this device, exceeding this amount will throw an // OutOfMemory exception. final int memClass = ((ActivityManager)getSystemService(Context.ACTIVITY_SERVICE)) .getMemoryClass(); // Use 1/8th of the available memory for this memory cache. final int cacheSize = 1024 * 1024 * memClass / 8; mMemoryCache = new LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { // The cache size will be measured in bytes rather than number of items. return bitmap.getByteCount(); } }; } public void addBitmapToMemoryCache(String key, Bitmap bitmap) { if (getBitmapFromMemCache(key) == null) { mMemoryCache.put(key, bitmap); } } public Bitmap getBitmapFromMemCache(String key) { return (Bitmap) mMemoryCache.get(key); } } -- Delivered by Feed43 service
Related Posts
There is no other posts in this category.Popular
-
[Android] Talking Tom Cat 2 Free Download [mediafire]Talking Tom Cat 2 Free has been a fun and great game for relaxing since its first release. Accordi…
-
Majesty: Northern Expansion Full v.1.0.7 (Paid Version) Android Apk Game DownloadMajesty: Northern Expansion Full v.1.0.7 Requirements: Android 1.6+ Overview: “Majesty: The Nor…
-
ezPDF Reader PDF Annotate Form v1.9.4.0 (Paid Version) Android Apk App DownloadezPDF Reader PDF Annotate Form v1.9.4.0 Requirements: Android OS 2.1+ Overview: Audio & Vid…
-
Real football 2010 HD 480x800 (update)Lead your team to the championship and make trades to recruit the greatest players, or change the…
-
Radiant Defense v1.2.2Radiant Defense v1.2.2 Requirements: Android 2.2+ Android Apk Free Radiant Defense v1.2.2 Overvi…
-
myDialer (Unlocked) v2.3.11 (Paid Version) Android Apk App DownloadNova Launcher Prime v1.3 beta 5 Requirements: Android 4.0+ Overview: Highly customizable, perfo…
-
Asphalt 7: Heat v1.0.0 Official Release CrackedHit the speed of heat in the newest, fastest, most visually stunning edition of the famed Asphalt s…

Post a Comment
Post a Comment