android 半透明裁剪框 截取图片 头像
申明:本文部分内容为网络相关资料整理,并结合本人实际工作总结而成。请引用或者转载注明出处,对于文章内容有疑问请留言。
一、功能简介
对于图片的裁剪操作,可能比较常见。但是在一些app中使用半透明裁剪框截图图片,用作头像,还如何实现呢?怎么把图片放在截取框的下面,以及怎么实现放大缩小后的截取呢?
二、构思
1.布局文件(片段)
<RelativeLayoutandroid:id="@+id/my_show_fragment_rl_clipBox"android:layout_width="@dimen/my_show_fragment_tv_picture_width"android:layout_height="@dimen/my_show_fragment_tv_picture_height"android:layout_centerHorizontal="true"android:layout_marginTop="@dimen/my_show_fragment_tv_picture_marginTop"><RelativeLayoutandroid:id="@+id/my_show_fragment_rl_clip"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/my_show_fragment_iv_picture"android:layout_width="@dimen/my_show_fragment_tv_picture_width"android:layout_height="@dimen/my_show_fragment_tv_picture_height"/></RelativeLayout><Viewandroid:id="@+id/my_show_fragment_v_clipBox"android:layout_width="@dimen/my_show_fragment_tv_picture_width"android:layout_height="@dimen/my_show_fragment_tv_picture_height"android:background="@drawable/my_show_scale_box"/>
</RelativeLayout>
2.java代码(部分)
mShowFragmentXml = inflater.inflate(R.layout.my_show_fragment, container, false);mClipRl = (RelativeLayout) mShowFragmentXml.findViewById(R.id.my_show_fragment_rl_clip);mPhotoIv = (ImageView) view.findViewById(R.id.my_show_fragment_iv_picture);ViewTreeObserver viewTreeObserver = mShowFragmentXml.getViewTreeObserver();viewTreeObserver.addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() {@Overridepublic void onWindowFocusChanged(final boolean hasFocus) {if (hasFocus) {int layoutWidth = mClipRl.getWidth();int layoutHeight = mClipRl.getHeight();int imgWidth = bitmap.getWidth();int imgHeight = bitmap.getHeight();int selectWidth = mClipView.getWidth();int selectHeight = mClipView.getHeight();//缩放比例float scaleNum;//将要裁剪的图片长宽高做对比, 将较小的一方做等比缩放成裁剪框大小if (imgWidth < imgHeight) {scaleNum = (selectWidth * 1.0f) / (imgWidth * 1.0f);imgWidth = selectWidth;imgHeight = (int) (scaleNum * imgHeight);} else {scaleNum = (selectHeight * 1.0f) / (imgHeight * 1.0f);imgWidth = (int) (scaleNum * imgWidth);imgHeight = selectHeight;}Matrix matrix = new Matrix();matrix.postScale(scaleNum, scaleNum);//平移距离matrix.postTranslate((layoutWidth - imgWidth) / 2, (layoutHeight - imgHeight) / 2);mTop = (layoutHeight - selectHeight) / 2;mLeft = (layoutWidth - selectWidth) / 2;//设置缩放类型为矩阵mPhotoIv.setScaleType(ImageView.ScaleType.MATRIX);mPhotoIv.setImageMatrix(matrix);mPhotoIv.setImageBitmap(bitmap);}}});mPhotoIv.setImageBitmap(bitmap);mPhotoIv.setOnTouchListener(this);mClipView = mShowFragmentXml.findViewById(R.id.my_show_fragment_v_clipBox);
3.解析
1)对整个布局进行窗口焦点监听,图片缩放移动之后的大小计算放在里面。
2)id为my_show_fragment_v_clipBox 的view是半透明截取框,此截取框长宽固定。
3)计算缩放比例以及移动距离,显示新的图片。
android 半透明裁剪框 截取图片 头像相关推荐
- ios 裁剪框大小_iOS实现裁剪框和图片剪裁功能
这篇文章主要为大家详细介绍了iOS实现裁剪框和图片剪裁功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下图片处理中经常用的图片剪裁,就是通过剪裁框确定图片剪裁的区域,然后剪去该区域的图片,今天实现 ...
- android 设置动态头像,Android实现动态圆环的图片头像控件
先看效果图: 现在大部分的app上难免会使用到圆形头像,所以今天我给大家分享一个单独使用的,并且周围带有圆环动画的花哨圆形头像控件,本控件是在圆形头像控件基础上实现的,只是在其周围再画一些不同大小的圆 ...
- android 华为裁剪全图,华为手机头像上传裁剪操作 报错
华为手机头像上传操作, 裁剪点存储--进入裁剪后--点确定, 就直接报错退出程序了,其他机型测都是成功的,求大神指教 报错代码 @Override protected void onActivityR ...
- android 拍照裁剪以及本地图片裁剪工具类使用
适用于App头像上传的使用,可以进行本地图片以及拍照来裁剪得到头像的过程 https://github.com/leo-wxy/ImageCropUtil
- Android 九宫格裁剪框
先上效果图: sourceSets {main {res.srcDirs = ['src/main/res', 'src/main/res/raw']assets.srcDirs = ['src/ma ...
- js截取图片 裁剪图片之cropper.js插件用法详解
js截取图片 裁剪图片之cropper.js插件用法详解 源码:https://github.com/fengyuanchen/cropper 引入+使用 <link href="/p ...
- Android 7.0拍照/相册/截取图片FileProvider使用
Android 7.0拍照/相册/截取图片FileProvider使用 Android 70拍照相册截取图片FileProvider使用 GitHub地址 HIT THE PIT 需求 实现解析 一 ...
- android 自定义圆形裁剪框,android 头像裁剪控件
#头像裁剪控件 支持圆形和方形预览,调用简单 控件参数说明 backgroundBoxColor1背景方格颜色1,两种颜色组成方背景效果,两个背景色使用相同颜色,成纯色背景交 backgroundBo ...
- 基于cropper和sweetalert的简单图片/头像裁剪上传
基本功能 前端基本样式: 进行图片裁剪及上传: 点击上传后,js会将截取到的数据转为图片数据利用ajax发送给后台进行存储.存储成功后,刷新前端页面,头像改变. 上传成功后:自动刷新网页,更改头像 基 ...
最新文章
- IDEA函数调用关系图插件
- 浏览器默认标签样式总结及css初始化程序(转)
- ckeditor默认字体设置
- python读txt文件 数组-python将txt等文件中的数据读为numpy数组的方法
- react把表格渲染好ui_《RSUITE》React企业级UI框架实战评测
- Java Spring DI之旅
- POJ_2593最大两不想交子段和问题
- javascript学习系列(2):数组中的filter方法
- zephyr_Facebook,IBM,Yahoo和更多新闻发布的物联网Zephyr项目
- mysql ddl 失败_PHP加载mysql DDL会失败
- SWFUpload控件使用
- 微信公众号模板消息内容key提取代码
- python cox模型_python Cox比例风险假设检验-基于lifelines库
- 计算机软件系统 七年级,系统软件作用大七年级信息技术教案(5页)-原创力文档...
- 常见中文字体英文名称以及windows默认字体列表
- 全屏滚动,微场景,H5全屏切换滚动页面制作的方法介绍
- C语言和Bash脚本实现身份证号码尾号验证
- 华为手机安装Goole play教程及安装包
- 火狐中无法打开google的搜索结果的解决方式
- apt-get -yqq install 与apt-get install的区别
热门文章
- Mosaicking to Distill Knowledge Distillation from Out-of-Domain Data
- Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
- 15.Scala- 文件和正则表达式
- 【BUCTOJ训练:字符串最大跨距(Python)】
- Android开发实用小技巧九——内嵌WebView的使用(内置浏览器)
- bw项目抱佛脚入门资料-2.按照指标创建BW数据存储对象
- UVa 10813 - Traditional BINGO
- 352记--扬哥本纪
- Flash游戏教程:控制物体运动三法
- 【心理】执行功能障碍