android选择图片或拍照开源项目,Android 开源照相和图片选择框架PictureSelector
拍照或者相册选择图片并渲染到UI上,发现了一个更简单的三方框架来实现 —— PictureSelector。Github地址:https://github.com/LuckSiege/PictureSelector 。java
用这个开源框架代码量会减小不少,没必要本身去画自定义的相册和相机的选择弹窗,不用顾及android不一样版本的特效,好比6.0+的动态权限申请和7.0+的禁止经过 file://Uri 的方式访问文件,压缩方面没必要去写Luban压缩的诸多代码处理,简单方便, onActivityResult回调里轻轻松松就能取到目标图片的url,框架处理了全部的细节。 android
效果图git
框架把该作的都作了,耦合性也好,复用性强方便集成。 MainActivity源码:github
package com.pictureselectordemo;
import android.content.Intent;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.entity.LocalMedia;
import java.io.File;
import static com.luck.picture.lib.config.PictureMimeType.ofImage;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ImageView img_face;
//所选相册图片的路径(原图/压缩后/剪裁后)
String albumPath = "";
//用来转换相机路径用的
LocalMedia localMedia = new LocalMedia();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img_face = (ImageView) findViewById(R.id.img_face);
img_face.setOnClickListener(this);
}
/**
* picSelector的相册相机界面
*
* // 例如 LocalMedia 里面返回三种 path
* // 1.media.getPath(); 为原图 path
* // 2.media.getCutPath();为裁剪后 path,需判断 media.isCut();是否为 true
* // 3.media.getCompressPath();为压缩后 path,需判断 media.isCompressed();是否为 true
* // 若是裁剪并压缩了,以取压缩路径为准,由于是先裁剪后压缩的
*
*/
protected void showPicSeleDialog() {
// 进入相册 如下是例子:不须要的api能够不写
PictureSelector.create(MainActivity.this)
.openGallery(ofImage())// 所有.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
.theme(R.style.picture_default_style)// 主题样式设置 具体参考 values/styles 用法:R.style.picture.white.style
.maxSelectNum(1)// 最大图片选择数量
.selectionMode( PictureConfig.SINGLE)// 多选 or 单选
.isCamera(true)// 是否显示拍照按钮
.isZoomAnim(true)// 图片列表点击 缩放效果 默认true
.imageFormat(PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg
.compress(true)// 是否压缩
.synOrAsy(true)//同步true或异步false 压缩 默认同步
.compressSavePath(getCompressPath())//压缩图片自定义保存地址
//.sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
.glideOverride(160, 160)// glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度
.forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { // 若是返回码是能够用的
switch (requestCode) {
case PictureConfig.CHOOSE_REQUEST:
if(PictureSelector.obtainMultipleResult(data).get(0) != null)
{
// 图片选择结果回调
localMedia = PictureSelector.obtainMultipleResult(data).get(0);
if(localMedia.isCompressed())
{
albumPath = localMedia.getCompressPath();
img_face.setBackgroundResource(0);
//设置图片圆角角度
RoundedCorners roundedCorners = new RoundedCorners(30);
//经过RequestOptions扩展功能
RequestOptions options = RequestOptions.bitmapTransform(roundedCorners).override(300, 300)
//圆形
.circleCrop();
Glide.with(MyApplication.getInstance().getContext())
.load(albumPath).apply(options).into(img_face);
}
}
break;
}
}
}
// 压缩后图片文件存储位置
private String getCompressPath() {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/PictureSelector/image/";
File file = new File(path);
if (file.mkdirs()) {
return path;
}
return path;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.img_face:
//弹出拍照,照片弹窗
showPicSeleDialog();
break;
}
}
}
android选择图片或拍照开源项目,Android 开源照相和图片选择框架PictureSelector相关推荐
- Android开源项目以及开源框架,各种UI实现效果
开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...
- Android开源项目以及开源框架,各种UI实现效果。
开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...
- 【开源项目----Android OPenGLES渲染YUV视频文件】
[开源项目----Android OPenGLES渲染YUV视频文件] OpenGLES对YUV渲染相关文章参考
- [Android开源项目] GitHub开源项目总结 (转)
[Android开源项目] GitHub开源项目总结 GitHub开源项目android-styled-dialogs http://neast.cn/forum.php?mod=viewthread ...
- 阿里云PolarDB-X荣获“2022 OSCAR 尖峰开源项目及开源社区”奖
9月16日,OSCAR 2022 开源产业大会在京召开,会议由中国信息通信研究院.中国通信标准化协会主办,中国通信标准化协会云计算标准和开源推进委员会承办.此次会议以"千行百业 可信开源&q ...
- 我们的开源项目-暨开源力量公开课年度庆典活动
我们的开源项目-暨开源力量公开课年度庆典活动 我们的开源项目-暨开源力量公开课年度庆典活动 大会介绍 还记得2012年"我们的开源项目"活动么? 2012年3月-7月,历时5个月, ...
- Android开源项目以及开源库集合(持续更新中)
UI Awesome-MaterialDesign – MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库. awesome-andr ...
- Android Hawk数据库的源码解析,Github开源项目,基于SharedPreferences的的存储框架
今天看了朋友一个项目用到了Hawk,然后写了这边文章 一.了解一下概念 Android Hawk数据库github开源项目 Hawk是一个非常便捷的数据库.操作数据库只需一行代码,能存任何数据类型. ...
- 编译 android 内核,编译内核 | Android 开源项目 | Android Open Source Project
本页详细介绍了如何仅编译内核.以下说明假设您尚未下载整个 AOSP:如果您已完成下载,则可以跳过 git clone 对应的步骤,但下载内核源代码的步骤除外. 本部分中的所有示例均使用 hikey 内 ...
最新文章
- 链表游戏:CVE-2017-10661之完全利用
- LiveVideoStackCon讲师热身分享 ( 十三 ) —— Intel QSV技术在FFmpeg中的实现与使用
- 教你自制.NET Core Global Tools
- Kettle入门--作业和转换的使用
- sql server从一个数据库复制一张表到另外一个数据库
- JavaScript设计模式与实践--工厂模式
- ASP.NET中实现无刷新级联
- 网络流——基础,Dinic和Sap(Gap优化)算法
- 【一文学Linux系统基础操作】
- Java-Python对垒之质数计算
- (解决)application.yml文件图标不能正常显示为绿色叶子
- inventor如何画心_Illustrator | 如何画一个心型图案
- kafka中consumer和partition的对应关系
- 爬取《斗破苍穹》小说
- CMNET和CMWAP区别
- 华为手机如何调时间显示_华为手机照相有时间日期显示怎样设置
- mongoDB地理位置检索
- AI在实体零售行业的应用场景
- 使用IDEA打包项目(jar包和war包)
- Windows 8中无法使用Aero:6个仍可以使用的Aero功能