新建OvalImageView类继承android.support.v7.widget.AppCompatImageView

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;import com.fucaijin.sample.R;/*** 圆形的ImageView*/public class OvalImageView extends android.support.v7.widget.AppCompatImageView {private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);//抗锯齿private Bitmap mRawBitmap;private BitmapShader mShader;private Matrix mMatrix = new Matrix();private int strokeColor = 0xFFFFFFFF;//默认边框是白色private float strokeWidth = 0;//单位是像素的边框宽度public OvalImageView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {//        获取资源图片并转为BitmapBitmap rawBitmap = getBitmap(getDrawable());if (rawBitmap != null) {//            取较短的那一个作为圆的半径,保证整张图能填满整个圆int viewWidth = getWidth();int viewHeight = getHeight();int viewMinSize = Math.min(viewWidth, viewHeight);float dstWidth = viewMinSize;float dstHeight = viewMinSize;if (mShader == null || !rawBitmap.equals(mRawBitmap)) {mRawBitmap = rawBitmap;mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);}if (mShader != null) {mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight());mShader.setLocalMatrix(mMatrix);}mPaintBitmap.setShader(mShader);float radius = viewMinSize / 2.0f;// 如果边框宽度不为0,则画出边框if(strokeWidth != 0){Paint whitePaint = new Paint(Paint.ANTI_ALIAS_FLAG);whitePaint.setColor(strokeColor);// 首先画一个圆,填充的是边框的颜色,大小就是此控件设置的大小canvas.drawCircle(radius, radius, radius, whitePaint);// 在边框的圆的基础上再画一个圆,画的是图片,半径 = 此控件设置的大小 - 边框宽度,就露出了边框canvas.drawCircle(radius, radius, radius - strokeWidth, mPaintBitmap);}else {// 如果边框为0,直接画一个圆形图片即可canvas.drawCircle(radius, radius, radius, mPaintBitmap);}} else {super.onDraw(canvas);}}private Bitmap getBitmap(Drawable drawable) {if (drawable instanceof BitmapDrawable) {return ((BitmapDrawable) drawable).getBitmap();} else if (drawable instanceof ColorDrawable) {Rect rect = drawable.getBounds();int width = rect.right - rect.left;int height = rect.bottom - rect.top;int color = ((ColorDrawable) drawable).getColor();Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));return bitmap;} else {return null;}}/*** @param strokeWidth 要设置的边框宽度,单位是px*/public void setStrokeWidth(int strokeWidth) {this.strokeWidth = strokeWidth}/*** @param strokeColor 要设置的边框颜色,必须是带透明度的16进制,例如:0xFF0000FF*/public void setStrokeColot(int strokeColor) {this.strokeColor = strokeColor}
}

在xml文件中使用

<com.csti.datastructureteachingsystem.helper.OvalImageViewandroid:id="@+id/headphoto"android:layout_width="100dp"android:layout_height="100dp"android:layout_marginTop="8dp"android:scaleType="fitCenter"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.498"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:srcCompat="@drawable/avatar"tools:srcCompat="@drawable/avatar"/>

Android——ImageView设置圆形边框相关推荐

  1. Android ImageView设置边框

    ImageView设置边框其实很简单,一个shape就能搞定,无需自定义image view. shape_gray_square_bg.xml <?xml version="1.0& ...

  2. Android Glide加载圆形图片,设置圆形边框

    Glide加载图片,Glide可以很方便的实现圆形加载并且也还可以设置变色边框. 关于Glide的加载在这里不详细说了,主要说一下自定义BitmapTransformation来实现圆形图片加载 st ...

  3. android 自定义组件圆形边框

    在android开发中,我们经常要自定义组件如TextView等背景或边框为四角圆形. 首先,我们在drawable目录下新建一个xml文件,bg.xml <?xml version=" ...

  4. android 微信设置圆角边框代码,Android编程实现圆角边框的方法

    本文实例讲述了Android编程实现圆角边框的方法.分享给大家供大家参考,具体如下: 设置边框圆角可以在drawable-mdpi目录里定义一个xml: android:topRightRadius= ...

  5. android imageview设置边框,android ImageView 添加边框

    有两种方法可以给ImageView添加边框,一种是通过xml文件配置shape.另一种是重写ImageView的ondraw方法,这里用第二中方法: package org.example.image ...

  6. Android:设置圆形头像,Android截取圆形图片

    在有一些程序开发中,有时候会用到圆形,截取一张图片的一部分圆形,作为头像或者其他. 本实例就是截图圆形,设置头像的.      首先讲解一些代码 [html]  view plain copy < ...

  7. android imageview 设置网络图片,ImageView加载网络图片

    android网络加载图片框架Android-Universal-Image-Loader功能非常强大,其开源地址https://github.com/nostra13/Android-Univers ...

  8. Android ImageView设置图片原理

    关于图片和ImageView,其实有更多可以介绍的,比如在解析图片前获得图片的宽高,用来做图片适配:比如等比例缩小图片,以减小内存占用:比如图片旋转效果等等. 第一个问题和第二个问题: BitmapF ...

  9. Android imageview设置圆角

    顶部左右圆角 四角都圆角 第一种方法使用glide自带实现圆角方法 RoundedCorners roundedCorners = new RoundedCorners(5);圆角为5RequestO ...

最新文章

  1. 一个Python绘图示例程序中的几个语法糖果
  2. 3.什么叫堆排序?与快速排序有什么不同?
  3. C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码
  4. Linux解决find /run/user/1000/gvfs
  5. 航院 1874 畅通工程续
  6. 【自适应盲均衡9】基于判决反馈的多径衰落信道的盲均衡与MATLAB仿真(CMA-DFE)
  7. webpack设置应用缓存_如何使用Webpack在Rails应用程序中设置TinyMCE
  8. java this() super()_java中的this和super
  9. keras学习笔记-黑白照片自动着色的神经网络-Beta版
  10. OS + Linux RedHat 7 / redhat 7 configuration
  11. 如何训练您的医生...使用开源
  12. java enum 长度限制_Java中的Enum的使用与分析
  13. 微信小程序复制就好-JS工具eval5,用JS替换VBA处理Excel数据
  14. 体渲染-------颜色、不透明度调整
  15. 定时关机软件里的锁定计算机,怎么让电脑定时关机设置大全
  16. macOS - 安装 swig 、PCRE
  17. 原型图都可以用什么软件做?分享这9款给你
  18. Sentinel SuperPro加密锁编程开发指南
  19. dc是什么游戏的简称_足球里位置简称CB和DC有什么区别
  20. 【DRP项目】安装Oracle数据库之服务端安装+客户端安装(一)

热门文章

  1. ffmpeg文件无法下载
  2. POJ 2386 Lake Counting [DFS]
  3. OpenGL植物建模(附完整代码、注释清晰、分步讲解)
  4. 论出入口控制系统中的不同识别技术
  5. repeatation翻译_半导体专业术语翻译
  6. word恶意样本打开后闪退
  7. 【交换机配置】华为S5731基础配置以及SSH配置
  8. c1灯光语言,2017c1科目三灯光语音解读
  9. 通过区域指针实现PLC和HMI精智触摸屏的通信状态诊断的具体方法
  10. 江苏2017年计算机二级考试,2017年江苏计算机二级考试报名时间