项目中经常会用到一些图片的裁剪作为头像,需求基本是圆形或者是矩形的。
1、先上个效果图

2、背景是由选择图片传递过去显示的

主要思路
1、矩形在四周绘制四个矩形,为透明的黑色,注意绘制的四个矩形不要重叠,不然会有黑色的重叠框子无法查看,绘制完成边框之后,在中间绘制一个有白色边框的矩形。
2、圆形在四周绘制一个半径为高度一半的圆弧,为透明的黑色,绘制完边框之后,在中间绘制一个有白色变宽的圆形
3、获取bitmap,使用Bitmap.drawBitmap();方法,获取矩形或者圆形的bitmap

3、矩形主要代码

@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int width = this.getWidth();int height = this.getHeight();mWidth = width - mHorizontalPadding * 2;mVerticalPadding = (height - mWidth) / 2;mPaint.setColor(0xaa000000);//绘制左边canvas.drawRect(0, 0, mHorizontalPadding, height, mPaint);//绘制上边canvas.drawRect(mHorizontalPadding, 0, width - mHorizontalPadding, mVerticalPadding, mPaint);//绘制底部canvas.drawRect(mHorizontalPadding, height - mVerticalPadding, width - mHorizontalPadding, height, mPaint);//绘制右边canvas.drawRect(width - mHorizontalPadding, 0, width, height, mPaint);//绘制矩形边框mPaint.setColor(mBorderColor);mPaint.setStrokeWidth(mBorderWidth);mPaint.setStyle(Paint.Style.STROKE);canvas.drawRect(mHorizontalPadding, mVerticalPadding, width - mHorizontalPadding, height - mVerticalPadding, mPaint);}

4、圆形主要代码

@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int width = this.getWidth();int height = this.getHeight();int innerCircle = dip2px(mContext, 150); int ringWidth = height;//绘制圆形mPaint.setColor(Color.WHITE);mPaint.setStrokeWidth(2);mPaint.setStyle(Paint.Style.STROKE);canvas.drawCircle(width / 2, height / 2, innerCircle, mPaint);//绘制圆形周边的背景mPaint.setColor(0xaa000000);mPaint.setStrokeWidth(ringWidth);canvas.drawCircle(width / 2, height / 2, innerCircle + 1 + ringWidth/ 2, mPaint);}

5、布局主要代码

<com.tongju.common.widget.view.ClipImageViewandroid:id="@+id/src_pic"android:layout_width="fill_parent"android:layout_height="fill_parent" /><com.tongju.common.widget.view.ClipRectangleViewandroid:id="@+id/clipview"android:layout_width="fill_parent"android:layout_height="fill_parent" />

6、Activity主要代码

@Route(path = RouterPath.ROUTER_COMMON_IMAGE_CLIP)
public class ClipImageActivity extends BaseActivity implements View.OnClickListener {private ClipImageView mClipImageView;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_clip_image);}@Overrideprotected BasePresenter createPresenter() {return null;}@Overrideprotected void findViews() {this.mClipImageView = findViewById(R.id.src_pic);findViewById(R.id.iv_back).setOnClickListener(this);findViewById(R.id.tv_use).setOnClickListener(this);}@Overrideprotected void init() {//拍照或者选完相册照片传递uri过来Uri uri = getIntent().getParcelableExtra("image");Glide.with(this).load(uri).apply(new RequestOptions().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE)).transition(withCrossFade()).into(mClipImageView);}@Overridepublic void onClick(View v) {int id = v.getId();if (id == R.id.iv_back) {finish();} else if (id == R.id.tv_use) {Bitmap bitmap = mClipImageView.rectangleClip();//这边通过EventBus传递获取到的bitmap,因为bundle对bitmap传递有大小限制EventBus.getDefault().post(new MGetBitmap(bitmap));finish();}}}

github代码
https://github.com/llayjun/android_common_use/tree/master/%E7%9F%A9%E5%BD%A2%E5%9C%86%E5%BD%A2%E8%A3%81%E5%89%AA%E5%A4%B4%E5%83%8F%E5%8A%9F%E8%83%BD

Android图片圆形和矩形截图功能相关推荐

  1. android实现屏幕截图,Android-屏幕截图功能实现

    在ADASitemap应用中添加了地图截屏功能,如下是核心代码. private void GetandSaveCurrentImage() { //1.构建Bitmap WindowManager ...

  2. Qt5.10实现图片转文字功能添加截图功能代码分析

    继续更新之前的图片转文字功能,并添加截图功能代码. 这里我仅仅只是先截取全屏图片,点击截图功能就可以将屏幕截图.后续功能待完善. 我们来分析一下,这个是怎么实现的. 源码下载地址:ocr2019121 ...

  3. Android图片剪裁库

    最近利用一周左右的业余时间,终于完成了一个Android图片剪裁库,核心功能是根据自己的理解实现的,部分代码参考了Android源码的图片剪裁应用.现在将该代码开源在Github上以供大家学习和使用, ...

  4. android 圆形图片设置蒙层,Android引导蒙层,安卓新手引导图,引导图层,支持椭圆,圆形,矩形多种形状,一行代码快速搞定-Go语言中文社区...

    新手引导视图,初次打开页面时显示. 支持圆形,椭圆,矩形等多种图形 提示部分支持图片和文字提示 先看效果图 使用步骤. 使用起来特别简单,只需要把GuideView这个类复制到你的项目中就可以了 pa ...

  5. android截取网页图片,安卓版谷歌浏览器很快将获得滚动截图功能 可以用来截取整个网页...

    截图功能对用户来说应该是非常常用的功能,然而有时候截取网页时可能需要我们进行多次截图再拼接截图图片. 为解决这种问题现在已经有些软件提供滚动截图功能,滚动截图可帮助用户一次性将整个网页内容截图无需拼接 ...

  6. 【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能

    本文默认你已经学习了上一篇文章,如果你还没有学习,就赶快去学习吧.关注博主,学习更多内容. 文章目录 前言 一.任务目的 要求 二.实现截图功能 1. 截图功能分析 理论依据 1. 截图功能 2. 支 ...

  7. android 图片长方形_android 相机只拍摄矩形区域图片

    [实例简介] [实例截图] [核心代码] package org.yanzi.activity; import org.yanzi.camera.CameraInterface; import org ...

  8. android欢迎页圆形倒计时,android 欢迎页圆形进度条倒计时功能

    常见app欢迎页圆形进度条倒计时功能,可设置显示文字,进度条颜色,宽度,倒计时时间,内圆颜色.设置进度条类型  顺数进度条(0-100)还是倒数进度条(100-0): 先上效果图: 下面介绍实现逻辑: ...

  9. android实现截图功能吗,Android实现拍照截图功能

    本文将向大家展示如何拍照截图. 先看看效果图: 拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的.因此,我们不能像对待相册截图一样使用Bitm ...

最新文章

  1. 反向非归零编码_【基础】什么是编码器?
  2. [转]Entity Framework走马观花之把握全局
  3. 新乡学院计算机田亮,2019届毕业论文答辩工作安排
  4. ListBox实现拖拽排序功能
  5. 网上常用免费WebServices集合
  6. _Linux后台开发6大常用的开源库,让你在同行中脱颖而出
  7. Flex的Tree全部展开收缩,ji展开选中单个节点
  8. VMware虚拟机的安装与创建
  9. 使用selenium + pytest + allure做WBE UI自动化
  10. 8086汇编实现 加密解密软件
  11. 十大常用经典排序算法总结!!!
  12. Android 照相机
  13. #使用SAS进行变量筛选、模型诊断、多元线性回归分析 #
  14. 浅墨博客 六 笔记
  15. mysql导出导入文本文件的几种方式总结
  16. JAVA中设置drwxr_x___权限_linux命令中chmod 777 以及drwxr-xr-x分别代表什么意思
  17. oracle 结果集已耗尽_java.sql.SQLException: 结果集已耗尽,该怎么解决
  18. sct分散加载文件格式与应用
  19. R语言和医学统计学(10):正态性和方差齐性检验
  20. vsp搭建项目全过程

热门文章

  1. 学校头哥作业7_集合与字典(头哥作业[Python])
  2. 金仓数据库KingbaseES高可用概述(高可用性需求分析与架构确定)
  3. 轻量级锁加锁解锁过程
  4. java 异常后重试_java – 异常后自动重试的功能
  5. 公路中、边桩坐标计算及放样程序
  6. 虚拟带库昆腾DX100报警BBU shutdown/sleep
  7. 矩阵计算 | 常用矩阵求导公式速查
  8. 佛教与茶文化、茶道与茶经
  9. 深圳学区房入学条件有哪些
  10. autoHotkey —同个快捷键在不同网页中不同功能