效果圖:android
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
主要實現:git
圖片加載框架: Android-Universal-Image-Loadergithub
Android-Universal-Image-Loader是一個開源的UI組件程序,該項目的目的是提供一個可重複使用的儀器爲異步圖像加載,緩存和顯示。緩存
GITHUB上的下載路徑爲:https://github.com/nostra13/Android-Universal-Image-Loader app
Universal-image-loader初始化代碼 框架
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache");
- //初始化Android-Universal-Image-Loader圖片加載框架
- ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
- .diskCache(new UnlimitedDiscCache(cacheDir)) //自定義緩存路徑
- .denyCacheImageMultipleSizesInMemory()
- .diskCacheFileNameGenerator(new Md5FileNameGenerator())//將保存的時候的URI名稱用MD5 加密
- .tasksProcessingOrder(QueueProcessingType.LIFO)
- .writeDebugLogs() // Remove for release app
- .build();
- ImageLoader.getInstance().init(config);
-
- private void initDisplayImageOptions() {
- disOptions = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.empty_photo) // 設置圖片在下載期間顯示的圖片
- .showImageForEmptyUri(R.drawable.empty_photo)// 設置圖片Uri爲空或是錯誤的時候顯示的圖片
- .showImageOnFail(R.drawable.empty_photo) // 設置圖片加載/解碼過程當中錯誤時候顯示的圖片
- .cacheInMemory(true)
- .cacheOnDisk(true)
- .considerExifParams(true)
- .bitmapConfig(Bitmap.Config.RGB_565)
- // .delayBeforeLoading(1000)//設置的下載前的延遲時間
- // .displayer(new RoundedBitmapDisplayer(20))//是否設置爲圓角,弧度爲多少
- .displayer(new FadeInBitmapDisplayer(100))// 是否圖片加載好後漸入的動畫時間
- .build();
- }
加載圖片代碼 異步
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- @Override
- public View getView(int index, View convertView, ViewGroup parent) {
- final GridHolder holder;
- if (convertView == null) {
- LayoutInflater layoutInflator = LayoutInflater.from(parent.getContext());
- convertView = layoutInflator.inflate(R.layout.grid_item, null);
- holder = new GridHolder();
- holder.appImage = (ImageView) convertView.findViewById(R.id.itemImage);
- holder.appName = (TextView) convertView.findViewById(R.id.itemText);
- holder.progressBar = (ProgressBar) convertView.findViewById(R.id.progress);
- convertView.setTag(holder);
- } else {
- holder = (GridHolder) convertView.getTag();
- }
- GridInfo info = list.get(index);
- if (info != null) {
- holder.appName.setText(info.getName());
- // imageLoader.displayImage(info.getPicUrl(),
- // holder.appImage,disOptions);
- imageLoader.displayImage(info.getPicUrl(), holder.appImage, disOptions, new SimpleImageLoadingListener() {
- @Override
- public void onLoadingStarted(String imageUri, View view) {
- holder.progressBar.setProgress(0);
- holder.progressBar.setVisibility(View.VISIBLE);
- }
- @Override
- public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
- // TODO Auto-generated method stub
- holder.progressBar.setVisibility(View.GONE);
- }
- @Override
- public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
- holder.progressBar.setVisibility(View.GONE);
- }
- }, new ImageLoadingProgressListener() {
- @Override
- public void onProgressUpdate(String imageUri, View view, int current, int total) {
- holder.progressBar.setProgress(Math.round(100.0f * current / total));
- }
- });
- }
- return convertView;
- }
緩存清理代碼 ide
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.item_clear_memory_cache:
- imageLoader.clearMemoryCache();//清除內存中的緩存
- return true;
- case R.id.item_clear_disc_cache:
- imageLoader.clearDiskCache();//清除SD卡中的緩存
- return true;
- default:
- return false;
- }
- }
不一樣圖片來源數據的獲取:代碼 動畫
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- String imageUri = "http://site.com/image.png"; // from Web
- String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
- String imageUri = "content://media/external/audio/albumart/13"; // from content provider
- String imageUri = "assets://image.png"; // from assets
- String imageUri = "drawable://" + R.drawable.image; // from drawables
圖片手勢縮放框架:GestureImageViewui
單圖瀏覽插件,支持圖片多點縮放,支持圖片拖動,開放單擊和雙擊事件,點擊事件與觸摸事件不衝突。
GestureImageView使用和配置是很是簡單的。入手很是容易。
GITHUB上的下載路徑爲:https://github.com/jasonpolites/gesture-imageview
Xml代碼
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- <com.polites.android.GestureImageView
- android:id="@+id/image"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_gravity="center"
- android:scaleType="centerCrop"
- gesture-image:max-scale="10.0"
- gesture-image:min-scale="0.7"
- gesture-image:strict="false" />
-
- gesture-image:min-scale 縮放最小值
- gesture-image:max-scale 縮放最大值
- gesture-image:strict 是否精確
保存圖片至手機相冊:代碼
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- /**
- * 保存圖片
- */
- private void savePic() {
- showShortToast("保存至手機相冊");
- MediaStore.Images.Media.insertImage(getContentResolver(), bitmapPic, "", "");
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + SD_PATH)));
- }
分享圖片代碼
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- /**
- * 分享圖片
- */
- private void sharePic() {
- Intent sintent = new Intent(Intent.ACTION_SEND);
- sintent.setType("image/*");
- File shareFile = new File(SD_PATH, "share.jpg");
- try {
- shareFile.createNewFile();
- saveBitmapFile(bitmapPic, shareFile);
- } catch (IOException e) {
- e.printStackTrace();
- }
- saveBitmapFile(bitmapPic, shareFile);
- Uri u = Uri.fromFile(shareFile);
- sintent.putExtra(Intent.EXTRA_STREAM, u);
- startActivity(Intent.createChooser(sintent, "分享圖片"));
-
- }
設置壁紙代碼
![收藏代碼](http://static.javashuo.com/static/loading.gif)
- /**
- * 設置壁紙
- */
- private void setWallpaper() {
- wallpaperFile = new File(SD_PATH, "wallpaper.jpg");
- try {
- if (!wallpaperFile.exists()) {
- wallpaperFile.createNewFile();
- }
- saveBitmapFile(bitmapPic, wallpaperFile);
- } catch (IOException e) {
- e.printStackTrace();
- }
- Intent intent = new Intent("com.android.camera.action.CROP");
- int width = WallpaperManager.getInstance(this).getDesiredMinimumWidth();
- int height = WallpaperManager.getInstance(this).getDesiredMinimumHeight();
- intent.setDataAndType(Uri.parse("file://" + wallpaperFile.getPath()), "image/*");
- intent.putExtra("crop", "true");
- intent.putExtra("outputX", width);
- intent.putExtra("outputY", height);
- intent.putExtra("aspectX", width);
- intent.putExtra("aspectY", height);
- intent.putExtra("scale", true);
- intent.putExtra("scaleUpIfNeeded", true);
- intent.putExtra("noFaceDetection", true);
- intent.putExtra("output", Uri.parse("file://" + wallpaperFile.getPath()));
- intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.name());
- startActivityForResult(intent, SET_WALLPAPER);
-
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == SET_WALLPAPER &&resultCode!=0&& data != null) {
- WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
- try {
- wallpaperManager
- .setBitmap(BitmapFactory.decodeFile(wallpaperFile.getAbsolutePath()));
- showShortToast("設置壁紙成功");
- } catch (IOException e) {
- showShortToast("設置壁紙失敗");
- e.printStackTrace();
- }
- }
- }