Android自定义控件实现圆形图片
前言:我们都知道as(Android Studio)里面的所有可以使用图片的控件,都是方方正正的,如果我们做头像作用时,方方正正的就很奇怪,我们就想要一个圆的图片了。这里介绍一种自定义控件的方式来实现。
我们预计的效果:
首先,先自定义一个Java类;并实现圆的效果,代码如下。
package com.c201801090105.example.pengjian;import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;import androidx.annotation.Nullable;public class Circle extends androidx.appcompat.widget.AppCompatImageView {//画笔private Paint mPaint;//圆形图片的半径private int mRadius;//图片的宿放比例private float mScale;public Circle(Context context) {super(context);}public Circle(Context context, @Nullable AttributeSet attrs) {super(context, attrs);}public Circle(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);//由于是圆形,宽高应保持一致int size = Math.min(getMeasuredWidth(), getMeasuredHeight());mRadius = size / 2;setMeasuredDimension(size, size);}@SuppressLint("DrawAllocation")@Overrideprotected void onDraw(Canvas canvas) {mPaint = new Paint();Drawable drawable = getDrawable();if (null != drawable) {Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();//初始化BitmapShader,传入bitmap对象BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);//计算缩放比例mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());Matrix matrix = new Matrix();matrix.setScale(mScale, mScale);bitmapShader.setLocalMatrix(matrix);mPaint.setShader(bitmapShader);//画圆形,指定好坐标,半径,画笔canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);} else {super.onDraw(canvas);}}}
然后,在布局文件里面直接使用即可。
<com.c201801090105.example.pengjian.Circleandroid:id="@+id/touxiang"android:layout_width="100dp"android:layout_height="100dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:srcCompat="@drawable/dibu" />
注意:
这种方法必须是设置src,设置background不会生效
在ImageView中src与background是有区别的
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前景),bg是背景,可以同时使用。此外scaleType只是对src起作用,bg可设置透明度。
在动态加载图片中设置src可以参考imageview的几种设置方式
Android自定义控件实现圆形图片相关推荐
- Android自定义控件NumberCircleProgressBar(圆形进度条)的实现
Android自定义控件NumberCircleProgressBar(圆形进度条)的实现
- Android 自定义控件之圆形页面指示器CirclePageIndicator带划动效果
Android 自定义控件之圆形页面指示器CirclePageIndicator带划动效果 前言 感谢 效果图 目标 流程 自定义属性 自定义默认属性 自定义接口 创建控件类继承View 声明属性变量 ...
- android 自定义时钟,Android自定义控件之圆形时钟(续)
在上篇文章中,我向大家介绍了如何通过自定义View一步步画出一个漂亮的圆形时钟.如果你还没看的话,我不建议你接着往下看,因为这篇文章是接着上篇的文章,如果直接看的话可能会不知所云,所以还是建议你先看一 ...
- android画一个圆形图片组件
imageview 显示圆形图片如下图. 圆形头像原理. 1.根据图片创建一个大小相同的画布. 2.在画布上画一个圆形. 3.画一个绘制交集,显示上层. // 将圆形图片,返回Bitmappublic ...
- Android 小工具--圆形图片
1.CircleImageView类代码 public class CircleImageView extends androidx.appcompat.widget.AppCompatImageVi ...
- Android自定义圆角圆形图片
转载请注明出处:http://blog.csdn.net/binbinqq86/article/details/79463977 说起Android里面的自定义圆角圆形图片,已经算是老生常谈的话题了, ...
- Android 自定义控件之圆形扩散View(DiffuseView)
实现效果 使用 属性方法 代码 源码下载 参考链接 实现效果 使用 XML中: <com.airsaid.diffuseview.widget.DiffuseViewandroid:id=&qu ...
- Android自定义控件之圆形头像
重写ImageView public class CircleImageView extends ImageView {private static final ScaleType SCALE_TYP ...
- Android 圆形图片 CircleImageView(Xfermode方式)
Android中实现圆形图片,总的说来有2种方法. Xfermode方式,就是本文要讲的实现方式. BitmapShader(着色器)和Matrix(矩阵)方式 第二种实现方式的代表作,就是Henni ...
最新文章
- poj 2677 tour
- gdb 查看,执行汇编代码
- 将特定像素点在图像上连接起来_图像分割【论文解读】快速图像分割的SuperBPD方法 CVPR-2020...
- python图像边缘提取_python通过robert、sobel、Laplace算子实现图像边缘提取详解
- Ubuntu16.04 安装配置Caffe
- Java Character 方法
- 如何让不懂信息化的甲方客户看懂需求文档,并确认签字?
- 从输入一个url到浏览器页面展示都经历了哪些过程?
- 使用tar或dd等完成Linux系统备份恢复
- ad logon hour
- 【学习】在Windows10平台使用Docker ToolBox安装docker(一)
- Python练手经典100例
- 「上海院子」打造不可复制的国宅风华
- Traitors Eight 硅谷“八叛徒”
- torch.optim 中的优化器
- 三极管分压共射放大电路
- 有限域GF(2^8).md
- MBR2060FCT肖特基二极管,ASEMI品牌原装ASEMI品牌肖特基二极管MBR2060FCT,最大正向整流电流:20A;反向峰值电压:60V;MBR2060FCT广泛应用于开关电源、LED电源
- pdf压缩工具_18MB秒变1MB,最好用的PDF在线压缩工具
- 二叉树的深度怎么算(Java代码实现)