支持拍照缩放增删的图片选择器

2024-06-15 10:58

本文主要是介绍支持拍照缩放增删的图片选择器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

仔细想了一下,一个项目中居然有5处引用到图片选择器:IM聊天页面的发送图片、聊天设置的选择背景图、工作圈发布动态的图片、预约线下会议的上传附图、邮箱的上传附图。如果每处都单独设计图片选择器,这样太占用APP资源了,不符合封装与共享思想,后来干脆把图片选择器封装成一个公共模块,以便其他模块调用。该选择器支持图片预览、缩放、拖动、增加与删除,可设置是否支持拍照、是否支持GIF动态图,设置选择图片最大数量,利用glide加载本地图片,利用recyclerView与fresco展示选中的图片,对选中的图片也可以点击查看全图。本文主要针对工作圈发布动态用到的图片选择器进行介绍,先看下效果图:


首先,需要在gradle添加依赖:

    compile 'com.android.support:recyclerview-v7:23.2.0'compile 'com.github.bumptech.glide:glide:3.7.0'compile 'com.facebook.fresco:fresco:0.8.0+'
读取本地图片需要权限,那么在manifest.xml添加上:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

为了不同像素的手机屏幕适配,得获取手机像素去设置对应宽度、高度:

        ScreenConfig.context = context;DisplayMetrics dm = context.getResources().getDisplayMetrics();screen_width_px = dm.widthPixels;screen_height_px = dm.widthPixels;screen_density = dm.density;screen_width_dp = dm.widthPixels/dm.density;screen_height_dp = dm.widthPixels/dm.density;
<pre name="code" class="java">        ViewGroup.LayoutParams lp = rv_photo_picker.getLayoutParams();int albumWidth = (int) (ScreenConfig.screen_width_px - ScreenConfig.screen_density * 17 * 2);lp.width = albumWidth;

 
另外初始化fresco: 

        //fresco初始化ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context).setDownsampleEnabled(true).build();Fresco.initialize( context, config );
图片选择器的核心部分,设置选择图片最大数量、是否支持拍照、是否支持GIF动态图、是否支持预览:

        PhotoPicker.builder().setPhotoCount(MAX - list.size())//设置最大数量.setShowCamera(true)//设置支持拍照.setShowGif(false)//设置不支持GIF动态图.setPreviewEnabled(true)//设置支持预览.start((Activity) context, PhotoPicker.REQUEST_CODE);//启动加载
glide加载本地图片:

       Glide.with(context).load(new File(path))//图片路径.centerCrop()//中心对齐.dontAnimate()//加载动画.thumbnail(0.5f)//缩略图.override(imageSize, imageSize)//图片尺寸.placeholder(com.frank.photopicker.R.drawable.__picker_ic_photo_black_48dp)//加载过程中.error(com.frank.photopicker.R.drawable.__picker_ic_broken_image_black_48dp)//加载出错.into(viewHolder.getIv(R.id.image));//绑定控件
点击图片右上角图标删除:

       viewHolder.getIv(R.id.imageDel).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {list.remove(position);notifyDataSetChanged();}});

点击选中图片,进行预览:

       viewHolder.getIv(R.id.image).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {FrescoImageView.PhotoPreview.builder().setPhotos(list).setCurrentItem(position).start((Activity) context);}});

好了,直到这里图片选择器的实现过程与功能介绍完毕,希望对读者有所帮助。如果需要查看完整demo过程,可以点击这里下载: http://download.csdn.net/detail/u011686167/9635368


这篇关于支持拍照缩放增删的图片选择器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063259

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

恶意PNG:隐藏在图片中的“恶魔”

&lt;img src=&quot;https://i-blog.csdnimg.cn/blog_migrate/bffb187dc3546c6c5c6b8aa18b34b962.jpeg&quot; title=&quot;214201hhuuhubsuyuukbfy_meitu_1_meitu_2.jpg&quot;/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。