图片异步加载(带进度条)+二级缓存+图片手势缩放+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.     }  
相关文章
相关标签/搜索