android工程换背景图片,Android初学者:用知乎Matisse开源项目制作更换应用背景图片功能...
前言
我搜索了下关于知乎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开源项目制作更换应用背景图片功能...相关推荐
- eclipse创建android工程,在eclipse创建android 工程
1.在工具栏选择"New".在弹出对话框里,开打android文件夹,选择"android application Project",选择"Next& ...
- java工程引用其他工程,Android工程:引用另一个Android工程的方法详解
现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A. 一个思路是把工程A做成纯Jar包,这样其他的工程就可以直 ...
- idea导入android工程,idea怎样导入Android studio 项目?
满意答案 s55f2avsx 2017.09.05 采纳率:46% 等级:12 已帮助:5646人 新版Android Studio/IntelliJ IDEA可以直接导入eclipse项目,不 ...
- Python玩家使用B站开源项目Real-CUGAN修复动漫图片、视频
发现B站开源了一个可以修复二次元动漫图片.视频的项目,话不多说,看对比图: 原图(600x600): 2倍超分图(1200x1200): 4倍超分图(2400x2400): B站开源项目Real-CU ...
- android工程换背景图片,android换肤功能 如何动态获取控件中背景图片的资源id?
这个是在在做一个换肤功能时遇到的问题. 对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话 ...
- android工程怎么连手机,android studio与手机连接调试步骤详解
android studio 版本不同连接手机方式有细微的不同,主要方式相似.介绍主要分手机和电脑两部分介绍. 一.手机部分 1.手机端下载一个"一键root权限获取",在安装的过 ...
- android+引用非+android+工程,[非原创]编译android C++工程找不到exception handle的解决办法...
C++工程有时候会进行异常处理, 所以在编译的过程中,可能会遇到这种提示: exception handling disabled, use -fexceptions to enable 这是编译选项 ...
- android studio换主题,为Android Studio换上一副更加好看的主题
为Android Studio换上一副更加好看的主题 珂泽 • 2020 年 10 月 23 日 Loading... 俗话说,工欲善其事,必先利其器,为了更好的开发出作品,那么也需要照顾好我们的眼睛 ...
- android 工程名怎么改,Android Studio修改项目名称和包名方法
平时项目开发中,有时候维护项目多,有的项目结构需要改变,这就需要我们去修改项目名称或者修改包名.下面介绍一下怎样修改项目名称和包名. 1. 修改项目名称 1)打开项目根目录下的setting.grad ...
最新文章
- 抗击疫情!阿里云为加速新药疫苗研发提供免费AI算力
- deepin 15.11 docker 安装命令
- java 保存的代码怎么写_java实现写入并保存txt文件的示例代码
- UIMenuController 和 UIResponderStandardEditActions
- 3dtiles加载调度原理分析
- mysql发生系统错误5_[玩转MySQL之一]MySQL体系架构简介
- 面试问到处理过什么棘手问题_为什么调节人工智能如此棘手?
- 自制 arduino 音符频率对照表(音符在arduino里对应的值)
- TARA-汽车安全概念
- 在计算机编程里pi是什么意思,编程中的术语“钩子”是什么意思?
- c语言注释用法,C语言的注释
- walking机器人仿真教程-应用-多点导航结合闹铃播放实现移动闹钟
- Kotlin 使用DSL构建语法结构 看这一篇就够了~
- C#中的转义字符和Verbatim字符串
- android测试内存的软件下载,AndroBench p10内存门app下载
- android通讯录换ipone,换新iPhone手机,通讯录你会转移吗?90%人居然还不会!
- python 12306抢票_Python爬虫实战:12306抢票开源!
- 大数据分析如何使用pandas进行时间序列分析
- NormalBlend
- 计算某一年的二月是多少天
热门文章
- 什么是单反相机,和普通相机有什么区别
- 小明一家过桥,过桥时是黑夜_过桥:如何过渡到软件开发的职业
- 开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)
- 论文投稿-图片处理技巧
- 希望成功,给点积分,才有勇气开VIP
- Python实用文档(持更)
- Java、JSP网上报名系统
- SQLSTATE[HY000] [1049] Unknown database
- 圣斗士里隐瞒了非常恐怖的剧情
- signature=689995ceebd2e64b214c3148d7b8e47a,WDR34基因突变致窒息性胸廓发育不良1例报道并文献复习...