您的位置:

实现Android ImageView控件圆角显示

一、介绍

Android开发中常用的ImageView控件默认情况下只能显示矩形图片,如果想要将图片显示为圆角,就需要进行特殊处理。在这篇文章中,我们将探讨几种实现Android ImageView控件圆角显示的方法,并给出代码示例。

二、使用ClipDrawable实现圆角显示

ClipDrawable是Android提供的一个Drawable对象,可以用于显示任意一个Drawable对象,但是只有指定区域内的部分会被显示出来。我们可以利用这个特性来实现ImageView的圆角显示。具体步骤如下:

1、在res/drawable目录下创建一个circle_bg.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <corners android:radius="999dp" />
        <solid android:color="#FFFFFFFF" />
    </shape>

这个文件定义了一个全白色的矩形,并将其四个角弧度设置为999dp,这么大的弧度可以视为圆形。

2、在布局文件中引用这个Drawable,并将其作为ImageView的背景:

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/image"
        android:background="@drawable/circle_bg" />

3、在Java代码中获取ImageView对象,并对其背景进行裁切:

    ImageView imageView = findViewById(R.id.image_view);
    ClipDrawable clipDrawable = new ClipDrawable(imageView.getBackground(), Gravity.CENTER, ClipDrawable.HORIZONTAL);
    imageView.setBackground(clipDrawable);

以上代码中,我们获取到ImageView的背景,然后利用ClipDrawable的构造方法将其进行裁切。通过设置Gravity参数,我们可以指定裁切的方向,这里设置为水平方向,实现左右两边的圆角效果。

三、使用BitmapShader实现圆角显示

BitmapShader是Android提供的一个Shader对象,可以用于绘制位图。我们可以将它作为Paint对象的Shader属性,然后绘制一个带圆角的矩形,最后将这个矩形作为ImageView的背景。具体步骤如下:

1、创建一个circle_bg.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <corners android:radius="10dp" />
        <solid android:color="#FFFFFFFF" />
    </shape>

这个文件定义了一个白色背景,四个角的圆角半径为10dp。

2、在Java代码中获取ImageView对象,并将其设置为圆角:

    ImageView imageView2 = findViewById(R.id.image_view2);
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);

    BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    Paint paint = new Paint();
    paint.setShader(shader);

    RectF rectF = new RectF(0, 0, imageView2.getWidth(), imageView2.getHeight());
    imageView2.setBackground(new BitmapDrawable(getResources(), getRoundBitmap(bitmap, 20)));

    imageView2.setBackground(new RoundRectDrawableWithShadow(this, paint, rectF));

在这段代码中,我们首先获取到ImageView,并将需要显示的图片转化为Bitmap对象。然后,我们创建一个BitmapShader对象,并利用Paint的setShader方法将其设置为该对象的属性。接下来,我们创建一个带圆角的矩形,并将其作为ImageView的背景。具体创建方法如下:

public static Bitmap getRoundBitmap(Bitmap bitmap, int radius) {
    int bitmapWidth = bitmap.getWidth();
    int bitmapHeight = bitmap.getHeight();
    Bitmap outBitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(outBitmap);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(Color.BLACK);
    Rect rect = new Rect(0, 0, bitmapWidth, bitmapHeight);
    RectF rectF = new RectF(rect);
    canvas.drawARGB(0, 0, 0, 0);
    canvas.drawRoundRect(rectF, radius, radius, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    return outBitmap;
}

3、如果需要实现阴影效果,可以创建一个RoundRectDrawableWithShadow类:

    public class RoundRectDrawableWithShadow extends Drawable {

        private Paint mPaint;
        private RectF mRectF;
        private float mRadius;
        private Path mPath;

        public RoundRectDrawableWithShadow(Context context, Paint paint, RectF rectF) {
            Resources resources = context.getResources();
            mPaint = paint;
            mRectF = rectF;
            mRadius = resources.getDimensionPixelSize(R.dimen.cornerRadius);
            mPath = new Path();
            mPath.addRoundRect(mRectF, mRadius, mRadius, Path.Direction.CW);
        }

        @Override
        public void draw(@NonNull Canvas canvas) {
            canvas.drawPath(mPath, mPaint);
        }

        // ... 其他代码省略 ...

    }

四、使用外部库实现圆角显示

如果以上两种方法在实现过程中存在过多复杂的操作,可以考虑使用现有的外部库来进行实现。这里我们推荐一款叫做Glide的图片加载库,在使用上非常方便,并且可以实现高性能的图片加载。具体步骤如下:

1、添加依赖关系到build.gradle文件中:

    dependencies {
        implementation 'com.github.bumptech.glide:glide:4.9.0'
        annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
    }

2、在Java代码中引用Glide库,并将生成的ImageView对象的圆角属性设置为指定值:

    ImageView imageView3 = findViewById(R.id.image_view3);
    String imageUrl = "http://www.xxx.com/image.png";
    Glide.with(this)
        .load(imageUrl)
        .apply(RequestOptions.bitmapTransform(new RoundedCorners(50)))
        .into(imageView3);

在这段代码中,我们首先获取到要显示的ImageView对象,然后将需要加载的图片URL传入Glide库的with方法中。同时,我们通过apply方法设置了一个RoundedCorners对象,这个对象表示要将ImageView的圆角设置为50个像素。最后,我们将生成的ImageView对象交给Glide库处理即可。

五、总结

以上是实现Android ImageView控件圆角显示的几种方法,每一种方法都有自己的优点和适用场景。如果你只需要实现简单的圆角效果,可以尝试ClipDrawable和BitmapShader的方法,如果需要实现复杂的效果,或者需要高性能的图片加载,那么Glide库是一个不错的选择。

实现Android ImageView控件圆角显示

2023-05-14
Android Studio中ImageView的常见用法举

一、常规用法 在Android Studio中,总的来说,ImageView就是用来显示图片的控件。如果你想要显示一张图片,首先需要将图片放入到项目的res/drawable文件夹下。然后,设置Ima

2023-12-08
Android应用UI设计:如何实现圆角图片效果

2023-05-14
android圆角全方位了解

2023-05-19
提高Android ImageView显示效果的技巧

ImageView是Android中常用的控件之一,在开发Android应用时经常需要使用该控件来显示图片。但是在使用ImageView时,如果没有注意一些细节,可能会导致图片显示效果不够理想,影响应

2023-12-08
Android圆角背景

2023-05-19
Android自定义View实现圆形ImageView

2023-05-14
Android ImageView重要性与使用方法

2023-05-17
让你的Android头像更出众:制作圆形头像

众所周知,人们在社交媒体上的头像素材对于给别人留下良好的第一印象非常重要。所以,如何制作一个简约、高颜值的圆形头像,成为了一项非常有实用性的技能。那么,在Android系统上,该如何制作这样的头像呢?

2023-12-08
Android圆形图片

2023-05-19
Android圆角边框详解

2023-05-20
Android绘制圆角矩形实现视觉效果的优化

2023-05-14
Android中如何实现全屏显示

2023-05-14
Android自定义View实现圆形进度条

2023-05-14
Android ImageView的ScaleType属性及

一、ScaleType属性介绍 ScaleType是ImageView控件的一个属性。它用于指定ImageView中显示的图片按照何种方式进行缩放和裁剪,以适应ImageView控件的大小。 在And

2023-12-08
Android开发:使用XML实现圆角边框样式

2023-05-14
打造精美卡片效果:Android CardView阴影设置技

Android中的CardView控件是一个常用的UI组件,可以用来展示各种信息,例如列表项、详情页面、嵌套布局等。其中阴影效果是CardView的特点之一,可以让UI界面更加美观,增强用户体验。本文

2023-12-08
用Picasso轻松实现Android图片加载

2023-05-14
美化你的页面:使用Android Shape实现圆角效果

一、什么是Android Shape Android Shape是Android提供的一种绘制基本形状的工具,可以通过XML文件来定义不同的几何形状,如矩形、圆形、椭圆、线框等。同时,Android

2023-12-08
Android视差效果实现的水平滚动控件

2023-05-14