前言

我搜索了下关于知乎Matisse的使用教程甚少,于是我就想着来做一个教程,这个教程是针对初学者的,因为我自己也是一个初学者,希望对各位刚刚接触Android开发的小伙伴有帮助!

关于Matisse

A well-designed local image and video selector for Android

意思既是一个本地图片和视频选择器,well-designed的,效果看起来很棒

预览图:

01.png

效果

这次我想到了我一个半年前做的项目(我第一个项目),一个倒数日记录器,可以给它增加更换背景图片功能的效果,效果如下,项目地址:https://github.com/zhaoweihaoChina/BigDays (欢迎star和fork)

02.gif

原理

使用Matisse选择图片后会返回一个图片Uri值,将它显示在ImageView上并保存在Sharedpreferences里头,下次打开这个Activity就从Sharedpreferences里头拿出Uri值并显示在ImageView上,Let's do it!

步骤

配置Matisse

添加依赖

Gradle:

//由于matisse使用glide做引擎的,所以要添加glide依赖

repositories {

jcenter()

}

dependencies {

compile 'com.zhihu.android:matisse:0.4.3'

compile 'com.github.bumptech.glide:glide:3.7.0'

}

添加Permission

android.permission.READ_EXTERNAL_STORAGE

android.permission.WRITE_EXTERNAL_STORAGE

如果是Android 6.0+以上要添加运行时权限获取

权限获取代码

按钮点击事件(将ZoomActivity替换成你当前Activity的名字)

...setOnClickListener{

if(ContextCompat.checkSelfPermission(ZoomActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){

ActivityCompat.requestPermissions(ZoomActivity.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);

}else{

//执行逻辑

}

}

重写方法

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

switch(requestCode){

case 1:

if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){

//执行逻辑

}else{

Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();

}

break;

default:

}

添加Proguard

打开proguard-rules.pro,添加下面代码,同步

-dontwarn com.squareup.picasso.**

使用Matisse

在上方//执行逻辑的地方添加如下代码

Matisse.from(ZoomActivity.this)

.choose(MimeType.allOf())

.countable(true)

.maxSelectable(1)//由于这里我只需要一张照片,所以最多选择设置为1

.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))

.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)

.thumbnailScale(0.85f)

.imageEngine(new GlideEngine())

.forResult(REQUEST_CODE_CHOOSE);

在头部声明

private final int REQUEST_CODE_CHOOSE=0;

重写方法

//这里方法是选择图片后返回的Uri数组

//返回的Uri数组

List mSelected;

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {

mSelected = Matisse.obtainResult(data);

//用setImageURI将Uri数组第一个Uri显示在ImageView上

mImageView.setImageURI(mSelected.get(0));

//将Uri转换为String保存在SharedPreferences中

SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();

editor.putString("imageUri",mSelected.get(0).toString());

editor.apply();

Toast.makeText(this, "Set up successfully", Toast.LENGTH_SHORT).show();

}else if(requestCode!=RESULT_OK&&requestCode!=RESULT_CANCELED){

//设置失败提示

Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();

}

}

到这里已经将图片显示在ImageView上并保存起来

接下来在每次打开这个Activity时将Uri读取出来并显示在ImageView上

在OnCreate方法中添加如下代码

//从SharedPreferences中读取之前保存好的Uri(String)

SharedPreferences preferences=getSharedPreferences("data",MODE_PRIVATE);

String imageUriString=preferences.getString("imageUri",null);

//这里设定用户第一次打开没有保存任何Uri,就显示默认的图片(保存在drawable中)

if(imageUriString!=null){

//非第一次打开,既有保存Uri

//String转换为Uri

Uri imageUri=Uri.parse(imageUriString);

mImageView.setImageURI(imageUri);

}else{

//没有保存Uri,显示默认图片

mImageView.setImageDrawable(getResources().getDrawable(R.drawable.image));

}

到这里效果就做好了,Have fun!

联系

如果对这篇文章有任何疑问可以联系我

公众号

我刚刚新建的一个微信公众号,志在分享一些我原创的和国内外初学者教程

公众号

赞赏

如果喜欢我的文章并对你有帮助,可以给我打赏(微信)

谢谢

微信支付

android工程换背景图片,Android初学者:用知乎Matisse开源项目制作更换应用背景图片功能...相关推荐

  1. eclipse创建android工程,在eclipse创建android 工程

    1.在工具栏选择"New".在弹出对话框里,开打android文件夹,选择"android application Project",选择"Next& ...

  2. java工程引用其他工程,Android工程:引用另一个Android工程的方法详解

    现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A. 一个思路是把工程A做成纯Jar包,这样其他的工程就可以直 ...

  3. idea导入android工程,idea怎样导入Android studio 项目?

    满意答案 s55f2avsx 2017.09.05 采纳率:46%    等级:12 已帮助:5646人 新版Android Studio/IntelliJ IDEA可以直接导入eclipse项目,不 ...

  4. Python玩家使用B站开源项目Real-CUGAN修复动漫图片、视频

    发现B站开源了一个可以修复二次元动漫图片.视频的项目,话不多说,看对比图: 原图(600x600): 2倍超分图(1200x1200): 4倍超分图(2400x2400): B站开源项目Real-CU ...

  5. android工程换背景图片,android换肤功能 如何动态获取控件中背景图片的资源id?

    这个是在在做一个换肤功能时遇到的问题. 对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话 ...

  6. android工程怎么连手机,android studio与手机连接调试步骤详解

    android studio 版本不同连接手机方式有细微的不同,主要方式相似.介绍主要分手机和电脑两部分介绍. 一.手机部分 1.手机端下载一个"一键root权限获取",在安装的过 ...

  7. android+引用非+android+工程,[非原创]编译android C++工程找不到exception handle的解决办法...

    C++工程有时候会进行异常处理, 所以在编译的过程中,可能会遇到这种提示: exception handling disabled, use -fexceptions to enable 这是编译选项 ...

  8. android studio换主题,为Android Studio换上一副更加好看的主题

    为Android Studio换上一副更加好看的主题 珂泽 • 2020 年 10 月 23 日 Loading... 俗话说,工欲善其事,必先利其器,为了更好的开发出作品,那么也需要照顾好我们的眼睛 ...

  9. android 工程名怎么改,Android Studio修改项目名称和包名方法

    平时项目开发中,有时候维护项目多,有的项目结构需要改变,这就需要我们去修改项目名称或者修改包名.下面介绍一下怎样修改项目名称和包名. 1. 修改项目名称 1)打开项目根目录下的setting.grad ...

最新文章

  1. 抗击疫情!阿里云为加速新药疫苗研发提供免费AI算力
  2. deepin 15.11 docker 安装命令
  3. java 保存的代码怎么写_java实现写入并保存txt文件的示例代码
  4. UIMenuController 和 UIResponderStandardEditActions
  5. 3dtiles加载调度原理分析
  6. mysql发生系统错误5_[玩转MySQL之一]MySQL体系架构简介
  7. 面试问到处理过什么棘手问题_为什么调节人工智能如此棘手?
  8. 自制 arduino 音符频率对照表(音符在arduino里对应的值)
  9. TARA-汽车安全概念
  10. 在计算机编程里pi是什么意思,编程中的术语“钩子”是什么意思?
  11. c语言注释用法,C语言的注释
  12. walking机器人仿真教程-应用-多点导航结合闹铃播放实现移动闹钟
  13. Kotlin 使用DSL构建语法结构 看这一篇就够了~
  14. C#中的转义字符和Verbatim字符串
  15. android测试内存的软件下载,AndroBench p10内存门app下载
  16. android通讯录换ipone,换新iPhone手机,通讯录你会转移吗?90%人居然还不会!
  17. python 12306抢票_Python爬虫实战:12306抢票开源!
  18. 大数据分析如何使用pandas进行时间序列分析
  19. NormalBlend
  20. 计算某一年的二月是多少天

热门文章

  1. 什么是单反相机,和普通相机有什么区别
  2. 小明一家过桥,过桥时是黑夜_过桥:如何过渡到软件开发的职业
  3. 开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)
  4. 论文投稿-图片处理技巧
  5. 希望成功,给点积分,才有勇气开VIP
  6. Python实用文档(持更)
  7. Java、JSP网上报名系统
  8. SQLSTATE[HY000] [1049] Unknown database
  9. 圣斗士里隐瞒了非常恐怖的剧情
  10. signature=689995ceebd2e64b214c3148d7b8e47a,WDR34基因突变致窒息性胸廓发育不良1例报道并文献复习...