100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android自定义控件实现圆形图片

Android自定义控件实现圆形图片

时间:2022-05-16 22:41:30

相关推荐

Android自定义控件实现圆形图片

前言:我们都知道as(Android Studio)里面的所有可以使用图片的控件,都是方方正正的,如果我们做头像作用时,方方正正的就很奇怪,我们就想要一个圆的图片了。这里介绍一种自定义控件的方式来实现。

我们预计的效果:

首先,先自定义一个Java类;并实现圆的效果,代码如下。

package com.c01090105.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.c01090105.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的几种设置方式

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。