功能:实现图片的加载(带进度条)、缓存、手势缩放、ViewPaper展示、设置壁纸等常用功能
效果图:
主要实现:
图片加载框架: Android-Universal-Image-Loader
Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。
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(); }
@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; }
@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; } }
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
图片手势缩放框架:GestureImageView
单图浏览插件,支持图片多点缩放,支持图片拖动,开放单击和双击事件,点击事件与触摸事件不冲突。
GestureImageView使用和配置是非常简单的。入手非常容易。
GITHUB上的下载路径为:https://github.com/jasonpolites/gesture-imageview
<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 是否精确
/** * 保存图片 */ private void savePic() { showShortToast("保存至手机相册"); MediaStore.Images.Media.insertImage(getContentResolver(), bitmapPic, "", ""); sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + SD_PATH))); }
/** * 分享图片 */ 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, "分享图片")); }
/** * 设置壁纸 */ 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(); } } }
相关推荐
viewpaper+fragment+radiobutton一个框架
Viewpaper+Fragment+EventBus+slidingMenu
这是一份tablayout+viewpaper+Recyclerview demon实例
Viewpaper+listview+fragment合集,包括下拉刷新, 上拉加载数据功能
详细介绍可见本人的博客:http://blog.csdn.net/xuexiangjys。一个简单的时间通知的demo,附带侧滑列表菜单等。
修改了github上的 photoview && image-loader 做成的本地图片浏览器 使之可以在4.1版本以下运行 使之滑到下一页复原上一张图片 使之单击退出浏览操作 使之不出现oom问题 欠缺:自定义viewpaper页卡
根据前人的代码改写而成,已经优化封装过,可直接用在项目中!感谢博主http://blog.csdn.net/badboy1110/article/details/8295833#plain
左右滑动呼出菜单,并且内容页面也可以左右滑动切换,并且不需要依赖slidingmenu这个库。
网络下载图片的功能,并且在ViewPaper和RecyclerView中展示出来,采用三级缓存的模式: a.先检测内存 b.再检测文件 c.最后检测网络下载
viewPaper的小demo。集中展示了四中viewPaper的使用方式。demo都很简单。但缺可以实现很好的界面框架。希望对大家有用,分享一下共同学习。
NULL 博文链接:https://wosyingjun.iteye.com/blog/2241634
android的viewpaper的滑动,封装viewpaper禁止滑动,导航页需要的
模仿安卓QQ,360,页面上viewpaper翻页有线条的滑动
android使用ViewPager实现底部菜单栏和左右滑动效果,加载多个Activity
Viewpaper露一半
模拟新浪信息一栏滑动分页。 ViewPaper滑动分页及禁止滑屏.
利用viewpaper来实现ACTIVITY 的左右滑动,标头在顶部。可以参考一下。
Viewpaper中嵌套Viewpaper,并实现侧边栏的代码设计
利用viewpaper 实现跑马灯图片轮换 并可设置10多种动画效果。是从实际项目中抽取出的demo,完整代码导入开发环境就可以运行,仔细查看demo中跑马灯图片有惊喜哦!