ImageLoader虽然说是一个相对于比较老的一个框架了 ,但是总的来说,还是比较好用的,今天我就总结了一下它的用法。还有调用系统相册并裁剪,以及,通过sharedpreference和文件存储来保存及拿取图片

这些,我就都结合在了一起  写了个demo.

main_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.ehsure.imageloadertest.MainActivity">
<Button
android:id="@+id/main_photo_bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="调用系统相册"
android:onClick="showImg"
/> <ImageView
android:id="@+id/iv_main_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout> MainActivty.class
public class MainActivity extends Activity {
ImageView imageView;
private String updateLogoPath;
private String userName;
private String userPhone;
private String userToken;
private long userId;
private String imgPath;
private File image;
private String newName; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.iv_main_img);
/*
(这一段都是说明ImageLoader的用法)
*/
try{
String newUrl = "http://ww4.sinaimg.cn/large/90bd89ffjw1eqvmd6o8r6j20go0p5ju2.jpg";
ImageLoader imageloader=ImageLoader.getInstance();
/*
1.这个是最简单的显示方法
*/
//使用默认的ImageLoaderConfiguration
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this.getApplicationContext());
//初始化ImageLoader的配置
imageloader.init(configuration);
//加载图片
imageloader.displayImage(newUrl, imageView);
/*
2.这个是使用自定义的配置来达到自己想要显示的效果
*/
//使用自定义的configuration
// ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(getApplicationContext())
// .threadPriority(Thread.NORM_PRIORITY - 2)//设置线程优先级
// .threadPoolSize(4)//线程池内加载的数量,推荐范围1-5内。
// .denyCacheImageMultipleSizesInMemory()//当同一个Uri获取不同大小的图片缓存到内存中时只缓存一个。不设置的话默认会缓存多个不同大小的图片
// .memoryCacheExtraOptions(480, 800)//内存缓存文件的最大长度
// .memoryCache(new LruMemoryCache(10 * 1024 * 1024))//内存缓存方式,这里可以换成自己的内存缓存实现。(推荐LruMemoryCache,道理自己懂的)
// .memoryCacheSize(10 * 1024 * 1024)
// .discCache(new UnlimitedDiscCache(createSavePath())) //内存缓存的最大值
// .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// .imageDownloader(new BaseImageDownloader(getApplicationContext(), 5 * 1000, 30 * 1000))//设置连接时间5s,超时时间30s
// .writeDebugLogs()
// .build();
//// 初始化ImageLoader的配置
// imageloader.init(configuration);
// //加载图片
// imageloader.displayImage(newUrl, imageView,setImageOptionsConfig());
}catch (Exception e){
e.printStackTrace();
}
} /**
* 配置图片加载时候的配置,在实际开发中可以对这些参数进行一次封装。
*/
public DisplayImageOptions setImageOptionsConfig(){
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher)//设置图片在下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher)//设置图片Uri为null或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher)//设置图片加载/解码过程中错误时显示的图片
.cacheInMemory(true)//设置下载的图片是否缓存在内存中
.cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
.considerExifParams(true)//是否考虑JPEG图像的旋转,翻转
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888)//设置图片的解码类型
.resetViewBeforeLoading(true)//设置图片在下载前是否重置和复位
.displayer(new SimpleBitmapDisplayer())//不设置的时候是默认的
//.displayer(new RoundedBitmapDisplayer(20))//是否为圆角,弧度是多少
//displayer()还可以设置渐入动画
.build();
return options;
} /*
下面这这一段是指如何调用系统相册,并裁剪显示
*/ public void showImg(View view){
switch (view.getId()) {
case R.id.main_photo_bt:
//这里是跳转到系统相册页面
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 0);
break;
}
} /*
* 开始图片裁剪
*/
private void startPhotoZoom(Uri uri, int size) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// crop为true是设置在开启的intent中设置显示的view可以剪裁
intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1); // outputX,outputY 是剪裁图片的宽高
intent.putExtra("outputX", size);
intent.putExtra("outputY", size);
intent.putExtra("return-data", true);
startActivityForResult(intent, 1);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
if (resultCode == Activity.RESULT_OK && data != null) {
//这里是从图库拿到图片之后调用系统的裁剪方法
startPhotoZoom(data.getData(),150);
}
}else if(requestCode==1){
if(data!=null){
Bundle bundle = data.getExtras();
if(bundle!=null){
//这是最终从图库拿到的并且已经裁剪的图片
Bitmap bitmap = data.getParcelableExtra("data");
imageView.setImageBitmap(bitmap);
}
}
}
} /*
这里是通过sharedpreference和文件存储来保存及拿取图片的
*/ /*
* 创建图片缓存在手机的文件
*/
public File createFile(Bitmap bitmap){
String path = "";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
path = Environment.getExternalStorageDirectory().getPath() + "/imageLoaderTest";
} else {
path = "/imageLoaderTest";
}
File file = new File(path);
if(!file.exists()){
file.mkdir();
}
path = path+"/"+getPhotoFileName();
file = new File(path);
Bitmap.CompressFormat cf = Bitmap.CompressFormat.JPEG;
try {
OutputStream os = new FileOutputStream(file);
boolean flag =bitmap.compress(cf, 100, os);
if(flag==true){
return file;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null; } // 使用系统当前日期加以调整作为照片的名称
private String getPhotoFileName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
return dateFormat.format(date) + ".jpg";
} /* 将bitmap转换成字节
*/
public String bitmapToString(Bitmap bitmap) {
String str = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 1, outputStream);
byte[] bytes = outputStream.toByteArray();
str = Base64.encodeToString(bytes, Base64.DEFAULT);
return str;
} /*
* 将字符串转换为bitmap
*/
public Bitmap stringToBitmap(String str) {
byte[] bytes = Base64.decode(str, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return bitmap;
}
}
 
其中
getPhotoFileName 和 stringToBitmap这两个方法实现的是bitmap和String间的互转,开发者拿到bitmap可将其转换成String存入SharedPreference,拿取的时候也可通过拿到的String将其转成bitmap.

这种方式通常在上传头像中用得比较常见


ImageLoader框架的使用、调用系统相册显示图片并裁剪显示、保存图片的两种方式的更多相关文章

  1. IOS 调用系统相册或照相机tab按钮显示中文

  2. iOS调用系统相册、相机 显示中文标题

    解决手机语言已经设置显示中文 在调用系统相册.相机界面 时显示英文问题, 在 info.plist里面添加Localized resources can be mixed          YES 表 ...

  3. iOS 调用系统相册 相机 时,显示中文标题

    解决手机语言已经设置显示中文 在调用系统相册.相机界面 时显示英文问题, 在 info.plist里面添加Localized resources can be mixed YES 表示是否允许应用程序 ...

  4. ios调用系统相册、相机 显示中文标题、本地化多语言支持

    因为调用系统相册.相机需要显示中文,所以搞了半天才知道是在Project->info->Custom ios Target Properties 添加 Localizations 并加入C ...

  5. Android 调用系统相机拍照保存以及调用系统相册的方法

    系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new ...

  6. Swift—调用系统相册和相机

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  7. Android调用系统相册和拍照的Demo

    最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...

  8. APP调用系统相册,使用3DTouch重压,崩溃

    崩溃:app调用系统相册,使用3DTouch重压,崩溃 问题描述 app调用系统相册,使用3DTouch重压,一般的app都会崩溃. 解决方法 写个分类即可 @implementation UICol ...

  9. 在调用系统相册时,UIIMagePickerController使用中偷换StatusBar颜色的问题

    在调用系统相册时,UIIMagePickerController使用中偷换StatusBar颜色的问题 此时解决办法是 #pragma mark - UIImagePickerController D ...

随机推荐

  1. nginx 安装与配置

    centos7环境下nginx的安装  版本 0.85 tar zxvf nginx.tar.gz cd nginx ./configure // ./configure --help 查看编译选项 ...

  2. 使用Word发表博客

        使用浏览器编辑博客,会让你感到非常不方便,如果在没有网络的时候,就不能打开编辑器页面了,只能先写在word或其他编辑软件中.可以设置word使用word编辑并直接发布到博客.   文件 - 新 ...

  3. 初学者的python学习笔记2

    本来想是先把作业二搞定的,结果发现作业二用的字典,一脸懵逼,还是先搞定第二课吧.其实第二课和第一课内容差不多,据说是第一课的老师去美国了……不管怎么样先整理一下吧. ----------------- ...

  4. NPOI 2.0 创建Excel文件

    如果只是简单的处理的话,只需要引用下载压缩包里的 NPOI.dll (office 2003)或 NPOI.OOXML.dll (office 2007) 文件而已. using System; us ...

  5. Extjs tree 更改图标

    去掉 树的叶子图标 .x-tree-node-icon { display: none; //不显示图标 } 更改图标  在后台返回的json中 有  添加  iconCls 属性 如    icon ...

  6. 我创建了一个网站,专门分享公众号的文章 https://asyons.com

    网址:https://asyons.com/,为做个网站,自娱自乐的自明星,但投资也挺大的了,注册了一家公司,公财私章,做账报税,阿里云服务器,全职开发.算上时间价值,按小时,投资过5万了.

  7. javascript的实践

    jQuery增强了css的选择器功能,是一个简洁快速的脚本库,能够使用短小的代码实现复杂的网页预览效果.如实现表格奇偶行异色 <script language="javascript& ...

  8. 记录Js

    1.对于js,没有系统的学习.有要经常的用到,每次都是百度查找,为了以后能查询. (1). $(function () { $('.restbtn').on("click", fu ...

  9. a primary example for Functional programming in javascript

    background In pursuit of a real-world application, let’s say we need an e-commerce web applicationfo ...

  10. cocos2d-x 3.2 创建新项目问题

    cocos2d-x 3.2 执行cocos2d-x\tools\cocos2d-console\console下的cocos2d.py,输入相应的参数即可创建一个新的项目,具体参数网上介绍一大堆,就不 ...