Android实现圆形图片小工具

 更新时间:2022年09月15日 08:46:18   作者:Rose J  
这篇文章主要为大家详细介绍了Android实现圆形图片小工具,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android实现圆形图片小工具的具体代码,供大家参考,具体内容如下

1.CircleImageView类代码

public class CircleImageView extends androidx.appcompat.widget.AppCompatImageView {

    //画笔
    private Paint mPaint;
    //圆形图片的半径
    private int mRadius;
    //图片的宿放比例
    private float mScale;

    public CircleImageView(Context context) {
        super(context);
    }

    public CircleImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //由于是圆形,宽高应保持一致
        int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
        mRadius = size / 2;
        setMeasuredDimension(size, size);
    }

    @SuppressLint("DrawAllocation")
    @Override
    protected 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);
        }
    }

}

2.布局文件中使用

代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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=".MainActivity">

   <com.hnucm18jr.myapplication.CircleImageView
       android:layout_width="100dp"
       android:layout_height="100dp"
       android:src="@drawable/a1"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent"
       android:layout_marginTop="200dp"/>

</androidx.constraintlayout.widget.ConstraintLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决android.support.v4.content.FileProvide找不到的问题

    解决android.support.v4.content.FileProvide找不到的问题

    这篇文章主要介绍了解决android.support.v4.content.FileProvide找不到的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android ANR分析trace文件的产生流程详情

    Android ANR分析trace文件的产生流程详情

    这篇文章主要介绍了Android ANR分析trace文件的产生流程详情,文章围绕主题展开相详细的内容介绍,需要的朋友可以参考一下
    2022-07-07
  • Android开发实现根据字母快速定位侧边栏

    Android开发实现根据字母快速定位侧边栏

    这篇文章主要为大家详细介绍了Android开发实现根据字母快速定位侧边栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Android ViewPager制作新手导航页(动态加载)

    Android ViewPager制作新手导航页(动态加载)

    这篇文章主要为大家详细介绍了Android ViewPager制作新手导航页,了解什么是动态加载指示器,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android自定义轮播图效果

    Android自定义轮播图效果

    这篇文章主要为大家详细介绍了Android自定义轮播图效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Android View.onMeasure方法详解及实例

    Android View.onMeasure方法详解及实例

    这篇文章主要介绍了Android View.onMeasure方法详解及实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • android小动画:不断扩散的圆点

    android小动画:不断扩散的圆点

    这篇文章介绍了如何实现android小动画:不断扩散的圆点,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,下面的实例代码,大家可以看看
    2021-11-11
  • Flutter进阶之实现动画效果(六)

    Flutter进阶之实现动画效果(六)

    这篇文章主要为大家详细介绍了Flutter进阶之实现动画效果第六篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android特效之水波纹的实现

    Android特效之水波纹的实现

    今天我们主要讲一讲如何通过自定义View(以下简称WaveView)实现 "咻咻咻" 式的水波纹扩散效果,感兴趣的小伙伴们可以参考学习。
    2016-08-08
  • Android Canvas的drawText()与文字居中方案详解

    Android Canvas的drawText()与文字居中方案详解

    这篇文章主要给大家介绍了关于Android Canvas的drawText()与文字居中方案的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12

最新评论