圖片異步加載(帶進度條)+二級緩存+圖片手勢縮放+ViewPaper+設置壁紙

效果圖:android



 

 

 

 主要實現:git

 

 圖片加載框架: Android-Universal-Image-Loadergithub

 

 Android-Universal-Image-Loader是一個開源的UI組件程序,該項目的目的是提供一個可重複使用的儀器爲異步圖像加載,緩存和顯示。緩存

GITHUB上的下載路徑爲:https://github.com/nostra13/Android-Universal-Image-Loader app

 

Universal-image-loader初始化代碼 框架

 收藏代碼

  1.  File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache");   
  2.         //初始化Android-Universal-Image-Loader圖片加載框架  
  3.         ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())  
  4.         .diskCache(new UnlimitedDiscCache(cacheDir)) //自定義緩存路徑    
  5.         .denyCacheImageMultipleSizesInMemory()  
  6.         .diskCacheFileNameGenerator(new Md5FileNameGenerator())//將保存的時候的URI名稱用MD5 加密   
  7.         .tasksProcessingOrder(QueueProcessingType.LIFO)  
  8.         .writeDebugLogs() // Remove for release app  
  9.         .build();  
  10.         ImageLoader.getInstance().init(config);  
  11.    
  12. private void initDisplayImageOptions() {  
  13.         disOptions = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.empty_photo) // 設置圖片在下載期間顯示的圖片  
  14.                 .showImageForEmptyUri(R.drawable.empty_photo)// 設置圖片Uri爲空或是錯誤的時候顯示的圖片  
  15.                 .showImageOnFail(R.drawable.empty_photo) // 設置圖片加載/解碼過程當中錯誤時候顯示的圖片  
  16.                 .cacheInMemory(true)  
  17.                 .cacheOnDisk(true)  
  18.                 .considerExifParams(true)  
  19.                 .bitmapConfig(Bitmap.Config.RGB_565)  
  20.                 // .delayBeforeLoading(1000)//設置的下載前的延遲時間  
  21.                 // .displayer(new RoundedBitmapDisplayer(20))//是否設置爲圓角,弧度爲多少  
  22.                 .displayer(new FadeInBitmapDisplayer(100))// 是否圖片加載好後漸入的動畫時間  
  23.                 .build();  
  24.     }  

加載圖片代碼 異步

 收藏代碼

  1. @Override  
  2.         public View getView(int index, View convertView, ViewGroup parent) {  
  3.             final GridHolder holder;  
  4.             if (convertView == null) {  
  5.                 LayoutInflater layoutInflator = LayoutInflater.from(parent.getContext());  
  6.                 convertView = layoutInflator.inflate(R.layout.grid_item, null);  
  7.                 holder = new GridHolder();  
  8.                 holder.appImage = (ImageView) convertView.findViewById(R.id.itemImage);  
  9.                 holder.appName = (TextView) convertView.findViewById(R.id.itemText);  
  10.                 holder.progressBar = (ProgressBar) convertView.findViewById(R.id.progress);  
  11.                 convertView.setTag(holder);  
  12.             } else {  
  13.                 holder = (GridHolder) convertView.getTag();  
  14.             }  
  15.             GridInfo info = list.get(index);  
  16.             if (info != null) {  
  17.                 holder.appName.setText(info.getName());  
  18.                 // imageLoader.displayImage(info.getPicUrl(),  
  19.                 // holder.appImage,disOptions);  
  20.                 imageLoader.displayImage(info.getPicUrl(), holder.appImage, disOptions, new SimpleImageLoadingListener() {  
  21.                     @Override  
  22.                     public void onLoadingStarted(String imageUri, View view) {  
  23.                         holder.progressBar.setProgress(0);  
  24.                         holder.progressBar.setVisibility(View.VISIBLE);  
  25.                     }  
  26.                     @Override  
  27.                     public void onLoadingFailed(String imageUri, View view, FailReason failReason) {  
  28.                         // TODO Auto-generated method stub  
  29.                         holder.progressBar.setVisibility(View.GONE);  
  30.                     }  
  31.                     @Override  
  32.                     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {  
  33.                         holder.progressBar.setVisibility(View.GONE);  
  34.                     }  
  35.                 }, new ImageLoadingProgressListener() {  
  36.                     @Override  
  37.                     public void onProgressUpdate(String imageUri, View view, int current, int total) {  
  38.                         holder.progressBar.setProgress(Math.round(100.0f * current / total));  
  39.                     }  
  40.                 });  
  41.             }  
  42.             return convertView;  
  43.         }  

緩存清理代碼 ide

 收藏代碼

  1. @Override  
  2. public boolean onOptionsItemSelected(MenuItem item) {  
  3.     switch (item.getItemId()) {  
  4.         case R.id.item_clear_memory_cache:  
  5.             imageLoader.clearMemoryCache();//清除內存中的緩存  
  6.             return true;  
  7.         case R.id.item_clear_disc_cache:  
  8.             imageLoader.clearDiskCache();//清除SD卡中的緩存  
  9.             return true;  
  10.         default:  
  11.             return false;  
  12.     }  
  13. }  

不一樣圖片來源數據的獲取:代碼 動畫

 收藏代碼

  1. String imageUri = "http://site.com/image.png"; // from Web  
  2. String imageUri = "file:///mnt/sdcard/image.png"; // from SD card  
  3. String imageUri = "content://media/external/audio/albumart/13"; // from content provider  
  4. String imageUri = "assets://image.png"; // from assets  
  5. String imageUri = "drawable://" + R.drawable.image; // from drawables  

圖片手勢縮放框架:GestureImageViewui

單圖瀏覽插件,支持圖片多點縮放,支持圖片拖動,開放單擊和雙擊事件,點擊事件與觸摸事件不衝突。

GestureImageView使用和配置是很是簡單的。入手很是容易。

GITHUB上的下載路徑爲:https://github.com/jasonpolites/gesture-imageview

Xml代碼 

 收藏代碼

  1. <com.polites.android.GestureImageView  
  2.         android:id="@+id/image"  
  3.         android:layout_width="fill_parent"  
  4.         android:layout_height="fill_parent"  
  5.         android:layout_gravity="center"  
  6.         android:scaleType="centerCrop"  
  7.         gesture-image:max-scale="10.0"  
  8.         gesture-image:min-scale="0.7"   
  9.         gesture-image:strict="false" />  
  10.   
  11. gesture-image:min-scale 縮放最小值  
  12. gesture-image:max-scale 縮放最大值  
  13. gesture-image:strict  是否精確  

保存圖片至手機相冊:代碼 

 收藏代碼

  1. /**  
  2.      * 保存圖片  
  3.      */  
  4.     private void savePic() {  
  5.         showShortToast("保存至手機相冊");  
  6.         MediaStore.Images.Media.insertImage(getContentResolver(), bitmapPic, "", "");  
  7.         sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + SD_PATH)));  
  8.     }  

分享圖片代碼 

 收藏代碼

  1. /**  
  2.  * 分享圖片  
  3.  */  
  4. private void sharePic() {  
  5.     Intent sintent = new Intent(Intent.ACTION_SEND);  
  6.     sintent.setType("image/*");  
  7.     File shareFile = new File(SD_PATH, "share.jpg");  
  8.     try {  
  9.         shareFile.createNewFile();  
  10.         saveBitmapFile(bitmapPic, shareFile);  
  11.     } catch (IOException e) {  
  12.         e.printStackTrace();  
  13.     }  
  14.     saveBitmapFile(bitmapPic, shareFile);  
  15.     Uri u = Uri.fromFile(shareFile);  
  16.     sintent.putExtra(Intent.EXTRA_STREAM, u);  
  17.     startActivity(Intent.createChooser(sintent, "分享圖片"));  
  18.        
  19. }  

設置壁紙代碼 

 收藏代碼

  1. /**  
  2.     * 設置壁紙  
  3.     */  
  4.    private void setWallpaper() {  
  5.         wallpaperFile = new File(SD_PATH, "wallpaper.jpg");  
  6.         try {  
  7.             if (!wallpaperFile.exists()) {  
  8.                 wallpaperFile.createNewFile();  
  9.             }  
  10.             saveBitmapFile(bitmapPic, wallpaperFile);  
  11.         } catch (IOException e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.         Intent intent = new Intent("com.android.camera.action.CROP");  
  15.         int width =  WallpaperManager.getInstance(this).getDesiredMinimumWidth();  
  16.         int height =  WallpaperManager.getInstance(this).getDesiredMinimumHeight();  
  17.         intent.setDataAndType(Uri.parse("file://" + wallpaperFile.getPath()), "image/*");  
  18.         intent.putExtra("crop", "true");  
  19.         intent.putExtra("outputX", width);  
  20.         intent.putExtra("outputY", height);  
  21.         intent.putExtra("aspectX", width);  
  22.         intent.putExtra("aspectY", height);  
  23.         intent.putExtra("scale", true);  
  24.         intent.putExtra("scaleUpIfNeeded", true);  
  25.         intent.putExtra("noFaceDetection", true);  
  26.         intent.putExtra("output", Uri.parse("file://" + wallpaperFile.getPath()));  
  27.         intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.name());  
  28.         startActivityForResult(intent, SET_WALLPAPER);  
  29.            
  30.     }  
  31.    @Override  
  32.    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  33.        if (requestCode == SET_WALLPAPER &&resultCode!=0&& data != null) {  
  34.             WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);  
  35.             try {  
  36.                 wallpaperManager  
  37.                         .setBitmap(BitmapFactory.decodeFile(wallpaperFile.getAbsolutePath()));  
  38.                 showShortToast("設置壁紙成功");  
  39.             } catch (IOException e) {  
  40.                 showShortToast("設置壁紙失敗");  
  41.                 e.printStackTrace();  
  42.             }  
  43.         }  
  44.     }  
相關文章
相關標籤/搜索