申明:本文部分内容为网络相关资料整理,并结合本人实际工作总结而成。请引用或者转载注明出处,对于文章内容有疑问请留言。

一、功能简介

对于图片的裁剪操作,可能比较常见。但是在一些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 半透明裁剪框 截取图片 头像相关推荐

  1. ios 裁剪框大小_iOS实现裁剪框和图片剪裁功能

    这篇文章主要为大家详细介绍了iOS实现裁剪框和图片剪裁功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下图片处理中经常用的图片剪裁,就是通过剪裁框确定图片剪裁的区域,然后剪去该区域的图片,今天实现 ...

  2. android 设置动态头像,Android实现动态圆环的图片头像控件

    先看效果图: 现在大部分的app上难免会使用到圆形头像,所以今天我给大家分享一个单独使用的,并且周围带有圆环动画的花哨圆形头像控件,本控件是在圆形头像控件基础上实现的,只是在其周围再画一些不同大小的圆 ...

  3. android 华为裁剪全图,华为手机头像上传裁剪操作 报错

    华为手机头像上传操作, 裁剪点存储--进入裁剪后--点确定, 就直接报错退出程序了,其他机型测都是成功的,求大神指教 报错代码 @Override protected void onActivityR ...

  4. android 拍照裁剪以及本地图片裁剪工具类使用

    适用于App头像上传的使用,可以进行本地图片以及拍照来裁剪得到头像的过程 https://github.com/leo-wxy/ImageCropUtil

  5. Android 九宫格裁剪框

    先上效果图: sourceSets {main {res.srcDirs = ['src/main/res', 'src/main/res/raw']assets.srcDirs = ['src/ma ...

  6. js截取图片 裁剪图片之cropper.js插件用法详解

    js截取图片 裁剪图片之cropper.js插件用法详解 源码:https://github.com/fengyuanchen/cropper 引入+使用 <link href="/p ...

  7. Android 7.0拍照/相册/截取图片FileProvider使用

    Android 7.0拍照/相册/截取图片FileProvider使用 Android 70拍照相册截取图片FileProvider使用 GitHub地址 HIT THE PIT 需求 实现解析 一 ...

  8. android 自定义圆形裁剪框,android 头像裁剪控件

    #头像裁剪控件 支持圆形和方形预览,调用简单 控件参数说明 backgroundBoxColor1背景方格颜色1,两种颜色组成方背景效果,两个背景色使用相同颜色,成纯色背景交 backgroundBo ...

  9. 基于cropper和sweetalert的简单图片/头像裁剪上传

    基本功能 前端基本样式: 进行图片裁剪及上传: 点击上传后,js会将截取到的数据转为图片数据利用ajax发送给后台进行存储.存储成功后,刷新前端页面,头像改变. 上传成功后:自动刷新网页,更改头像 基 ...

最新文章

  1. IDEA函数调用关系图插件
  2. 浏览器默认标签样式总结及css初始化程序(转)
  3. ckeditor默认字体设置
  4. python读txt文件 数组-python将txt等文件中的数据读为numpy数组的方法
  5. react把表格渲染好ui_《RSUITE》React企业级UI框架实战评测
  6. Java Spring DI之旅
  7. POJ_2593最大两不想交子段和问题
  8. javascript学习系列(2):数组中的filter方法
  9. zephyr_Facebook,IBM,Yahoo和更多新闻发布的物联网Zephyr项目
  10. mysql ddl 失败_PHP加载mysql DDL会失败
  11. SWFUpload控件使用
  12. 微信公众号模板消息内容key提取代码
  13. python cox模型_python Cox比例风险假设检验-基于lifelines库
  14. 计算机软件系统 七年级,系统软件作用大七年级信息技术教案(5页)-原创力文档...
  15. 常见中文字体英文名称以及windows默认字体列表
  16. 全屏滚动,微场景,H5全屏切换滚动页面制作的方法介绍
  17. C语言和Bash脚本实现身份证号码尾号验证
  18. 华为手机安装Goole play教程及安装包
  19. 火狐中无法打开google的搜索结果的解决方式
  20. apt-get -yqq install 与apt-get install的区别

热门文章

  1. Mosaicking to Distill Knowledge Distillation from Out-of-Domain Data
  2. Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
  3. 15.Scala- 文件和正则表达式
  4. 【BUCTOJ训练:字符串最大跨距(Python)】
  5. Android开发实用小技巧九——内嵌WebView的使用(内置浏览器)
  6. bw项目抱佛脚入门资料-2.按照指标创建BW数据存储对象
  7. UVa 10813 - Traditional BINGO
  8. 352记--扬哥本纪
  9. Flash游戏教程:控制物体运动三法
  10. 【心理】执行功能障碍