简单实现圆角图片CircleView

效果:

CircleImageView代码:

public class CircleImageView extends AppCompatImageView {

private Path mPath;

private RectF mRectF;

private Paint mPaint;

public CircleImageView(Context context) {

this(context, null);

}

public CircleImageView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init();

}

private void init() {

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mPaint.setColor(Color.RED);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeWidth(15);

mPath = new Path();

}

@Override

protected void onDraw(Canvas canvas) {

//设置外框的矩形区域,不可再init()初始化,构造器中width和height还未确定,可在onMesure()中获取并设置

mRectF = new RectF(0,0, getWidth(),getHeight());

//path划出一个圆角矩形,容纳图片,图片矩形区域设置比红色外框小,否则会覆盖住外框,随意控制

mPath.addRoundRect(new RectF(10, 10, mRectF.right-10,mRectF.bottom-10), 50, 50, Path.Direction.CW);

canvas.drawRoundRect(mRectF, 50, 50, mPaint); //画出红色外框圆角矩形

canvas.clipPath(mPath);//将canvas裁剪到path设定的区域,往后的绘制都只能在此区域中,

//这一句应该放在canvas.clipPath(path)之后,canvas.clipPath(path)只对裁剪之后的绘制起作用,

// 这个方法在ImageView中会画出xml设置的Drawable,落在刚才设置的path中

super.onDraw(canvas);

}

}

整个原理就是用Path划出一个圆角矩形区域,调用super.onDraw(canvas)就可以让Drawable 落在那个区域。

使用,xml:

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.why.traing2.MainActivity">

android:id="@+id/img_circle"

android:layout_width="200dp"

android:layout_height="200dp"

android:src="@drawable/gakki"

android:scaleType="centerCrop"

app:layout_constraintTop_toTopOf="parent"

android:layout_marginTop="8dp"

app:layout_constraintBottom_toBottomOf="parent"

android:layout_marginBottom="8dp"

android:layout_marginLeft="8dp"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintVertical_bias="0.501"

android:layout_marginRight="8dp"

app:layout_constraintRight_toRightOf="parent"

/>

Activivty:

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

CircleImageView circleImageView = (CircleImageView)findViewById(R.id.img_circle);

}

}

看了些参考资料,发现上篇写错了,发现思路比较简单的,记录下。也可以用Shader, Xfermode实现,参考:https://enggm.wordpxress.com/...

android xml图片圆角矩形,使用Path自定义圆角图片相关推荐

  1. IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)...

    本文转载自:http://blog.csdn.net/rhljiayou/article/details/9919713 首先了解一下CGContextRef: An opaque type that ...

  2. IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

    本文转载自:http://blog.csdn.net/rhljiayou/article/details/9919713 首先了解一下CGContextRef: An opaque type that ...

  3. CSS 使用border-radius属性实现标签元素变为正圆、椭圆、圆角矩形(可以自定义4个角的圆角大小)

    1 使用详解 border-radius 说明:给元素的边框设置圆角,默认不设置圆角为矩形,可以给元素设置圆角将元素变为正圆.椭圆或圆角矩形 语法: (1)border-radius:50%,给元素设 ...

  4. html圆角矩形的渐变色,canvas圆角矩形 PS制作渐变圆角矩形: 方法一:

    用canvas画只有一个角是圆角的矩形,能画出来么? CSS布局HTML小编今天和大家分享各位大侠指点, 找到方法了float[] radii={12f,12f,0f,0f,0f,0f,0f,0f}; ...

  5. canvas 圆角矩形填充_canvas制作圆角矩形(包括填充矩形的功能)

    canvas制作圆角矩形(包括填充矩形的功能) 您的浏览器不支持 HTML5 canvas 标签. window.onload = function() { var myCanvas = docume ...

  6. 自定义圆角矩形图片/圆形图片

    图片的圆形/圆角矩形的处理方式有很多,网上也有很多例子,最近项目比较清闲,就试着自己写了一个通用的图片处理,可以根据参数的不同自动生成原型图片或者圆角矩形图片的自定义view大致的效果如下图,两个vi ...

  7. Android圆形以及圆角矩形头像

    原理,通过设置画笔的Mode.SRC_IN将画布上重叠区域以外清除,圆形头像不就是我们的bitmap上在中心位置画一个圆然后两部分重叠的么. 如果不明白请往下看. 下面整张图是需要处理的bitmap, ...

  8. HTML设置单边圆角,如何在html中做圆角矩形和 只有右边的分隔线

    其实是对(理论上是对所有的)html元素: 而实际 常用的是 div块, 链接a 等运用圆角矩形的样式 这个圆角是通过元素: div, a的 css 样式来实现的: 样式: border-radius ...

  9. 如何在html中做圆角矩形和 只有右边的分隔线

    这个网站满好的,可以常看看 css-matic中有几个很好的写css可视化的工具 其实做css 版式布局等都可以有工具的 推荐40个优秀的免费CSS工具 debugger正则表达式在线 其实是对(理论 ...

最新文章

  1. 跨平台PHP调试器设计及使用方法——协议解析
  2. HDLBits 系列(30)Serial Receiver
  3. css盒子模型、边框border、外边距margin、填充padding、轮廓outline
  4. Word编写代码时输出半角引号
  5. 全球及中国家电用PET薄膜涂层钢卷市场前景形势与未来竞争规模展望报告2022版
  6. DeepMatch :用于推荐广告的深度召回匹配算法库
  7. 字节跳动---毕业旅行问题
  8. 关于使用两个GTP/GTX出现[DRC RTSTAT-1]error([route 35-54] critical warning)的问题详解
  9. mysql 中文列索引_MYSQL多列索引
  10. 【评分】第三次作业-团队展示
  11. 2021年将迎接你的是什么?
  12. java实现可选形参_Java:可选的可选实现
  13. mysql性能优化 硬件优化_mysql性能优化学习笔记(6)数据库配置优化硬件优化...
  14. Python json模块 - Python零基础入门教程
  15. 过拟合怎么产生的?防治措施?
  16. Redis签到功能设计与实现
  17. hdu-5703 Desert(水题)
  18. RabbitMQ学习之(二)_Centos6下安装RabbitMQ及管理配置
  19. 数位板驱动压力测试_【又来甩锅了】数位板/数位屏延迟怎么办?
  20. finallshell使用_Finalshell软件安装使用

热门文章

  1. mysql表分区数量限制_MySQL分区表的局限和限制详解
  2. iphone个人热点无法开启_无法在 iPhone 上正常使用“个人热点”怎么办?
  3. ios php mysql实例_php – 从iOS应用程序将图像存储到MYSQL数据库中
  4. zabbix前端php界面,Zabbix前端插件zatree在Zabbix 2.2.1前端报错的解决方案
  5. 硬盘读写测试工具_硬盘测速工具:Blackmagic Disk Speed Test Mac
  6. java spring源码_spring源码分析-spring中的bean
  7. php写else老是报错,调试PHP错误经常用到的一些
  8. mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
  9. Controller接口控制器(2)
  10. listview item里面的控件点击事件