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

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

相关文章

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Python利用GeoPandas打造一个交互式中国地图选择器

《Python利用GeoPandas打造一个交互式中国地图选择器》在数据分析和可视化领域,地图是展示地理信息的强大工具,被将使用Python、wxPython和GeoPandas构建的交互式中国地图行... 目录技术栈概览代码结构分析1. __init__ 方法:初始化与状态管理2. init_ui 方法: