拍照或者相册选择图片并渲染到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相关推荐

  1. Android开源项目以及开源框架,各种UI实现效果

    开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...

  2. Android开源项目以及开源框架,各种UI实现效果。

    开源项目和开源框架第一期 图片 Android-Universal-Image-Loader★15152 - 异步图像加载程序 glide★15006 - 媒体管理和图片加载框架 picasso★13 ...

  3. 【开源项目----Android OPenGLES渲染YUV视频文件】

    [开源项目----Android OPenGLES渲染YUV视频文件] OpenGLES对YUV渲染相关文章参考

  4. [Android开源项目] GitHub开源项目总结 (转)

    [Android开源项目] GitHub开源项目总结 GitHub开源项目android-styled-dialogs http://neast.cn/forum.php?mod=viewthread ...

  5. 阿里云PolarDB-X荣获“2022 OSCAR 尖峰开源项目及开源社区”奖

    9月16日,OSCAR 2022 开源产业大会在京召开,会议由中国信息通信研究院.中国通信标准化协会主办,中国通信标准化协会云计算标准和开源推进委员会承办.此次会议以"千行百业 可信开源&q ...

  6. 我们的开源项目-暨开源力量公开课年度庆典活动

    我们的开源项目-暨开源力量公开课年度庆典活动 我们的开源项目-暨开源力量公开课年度庆典活动 大会介绍 还记得2012年"我们的开源项目"活动么? 2012年3月-7月,历时5个月, ...

  7. Android开源项目以及开源库集合(持续更新中)

    UI Awesome-MaterialDesign – MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库. awesome-andr ...

  8. Android Hawk数据库的源码解析,Github开源项目,基于SharedPreferences的的存储框架

    今天看了朋友一个项目用到了Hawk,然后写了这边文章 一.了解一下概念 Android Hawk数据库github开源项目 Hawk是一个非常便捷的数据库.操作数据库只需一行代码,能存任何数据类型. ...

  9. 编译 android 内核,编译内核  |  Android 开源项目  |  Android Open Source Project

    本页详细介绍了如何仅编译内核.以下说明假设您尚未下载整个 AOSP:如果您已完成下载,则可以跳过 git clone 对应的步骤,但下载内核源代码的步骤除外. 本部分中的所有示例均使用 hikey 内 ...

最新文章

  1. 链表游戏:CVE-2017-10661之完全利用
  2. LiveVideoStackCon讲师热身分享 ( 十三 ) —— Intel QSV技术在FFmpeg中的实现与使用
  3. 教你自制.NET Core Global Tools
  4. Kettle入门--作业和转换的使用
  5. sql server从一个数据库复制一张表到另外一个数据库
  6. JavaScript设计模式与实践--工厂模式
  7. ASP.NET中实现无刷新级联
  8. 网络流——基础,Dinic和Sap(Gap优化)算法
  9. 【一文学Linux系统基础操作】
  10. Java-Python对垒之质数计算
  11. (解决)application.yml文件图标不能正常显示为绿色叶子
  12. inventor如何画心_Illustrator | 如何画一个心型图案
  13. kafka中consumer和partition的对应关系
  14. 爬取《斗破苍穹》小说
  15. CMNET和CMWAP区别
  16. 华为手机如何调时间显示_华为手机照相有时间日期显示怎样设置
  17. mongoDB地理位置检索
  18. AI在实体零售行业的应用场景
  19. 使用IDEA打包项目(jar包和war包)
  20. Windows 8中无法使用Aero:6个仍可以使用的Aero功能

热门文章

  1. python 复制dict_Python高级数据类型之字典、集合【明哥陪你学Python-六】
  2. skia android编译错误解决
  3. web 原型设计工具_适用于Web设计人员的7种原型设计工具
  4. 房屋出租系统(初级)
  5. Magic Leap开发指南(1)--开发前准备
  6. MagicLeap SDK 安装指南
  7. 电脑如何创建html文件夹,如何在电脑上创建自己的隐私文件夹
  8. P2P三种模式的分化和实质
  9. STC12CA560S2 ADC/PWM相关例程
  10. 时间戳转换成日期格式