Android圆角设置方法看着一篇文章就够了

 更新时间:2023年02月09日 10:07:30   作者:~yportnE  
我们在实际工作中,android经常有需要实现圆角的场景,下面这篇文章主要给大家介绍了关于Android圆角设置方法的相关资料,文中通过实例代码介绍的非常详细需要的朋友可以参考下

方法1:Outline

getView(R.id.image_view_1).setClipToOutline(true);
getView(R.id.image_view_1).setOutlineProvider(new ViewOutlineProvider() {
    @Override
    public void getOutline(View view, Outline outline) {
        outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radius);
    }
});

实现方法:

1) 要设置圆角的View.setClipToOutline(true)

2)要设置圆角的View.setOutlineProvider(ViewOutlineProvider provider)

ViewOutlineProvider 只有1个抽象方法,通过Outline.setRoundRect设置圆角:

public abstract void getOutline(View view, Outline outline);

方法特点:

1)对View设置,可View、ViewGroup

2)对4个角同时设置,不能单独设置单个角

方法2:CardView

        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_marginTop="@dimen/dp_6"
            app:cardCornerRadius="@dimen/dp_24"
            app:cardElevation="0dp"
            app:cardUseCompatPadding="false">
 
            <ImageView
                android:id="@+id/image_view_2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:src="#93D5DC"/>
 
        </androidx.cardview.widget.CardView>

实现方法:

1)对需要设置圆角的View,使用CardView包裹

2)对CardView设置,设置圆角、去除阴影和padding

app:cardCornerRadius="@dimen/dp_24"
app:cardElevation="0dp"
app:cardUseCompatPadding="false"

方法特点:

1)对View设置,可View、ViewGroup

2)对4个角同时设置,不能单独设置单个角

方法3:自定义Drawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="@dimen/dp_24"/>
    <solid android:color="#2A5CAA"/>
</shape>

实现方法:

1)自定义shape,设置radius

<corners android:radius="@dimen/dp_24"/>

方法特点:

1)对生成的图片进行设置

2)可对4角同时设置,也可对4角单独设置

 <corners
        android:bottomLeftRadius="@dimen/dp_24"
        android:bottomRightRadius="@dimen/dp_24"
        android:topLeftRadius="@dimen/dp_24"
        android:topRightRadius="@dimen/dp_24"/>

方法4:GradientDrawable和RoundedBitmapDrawable

            //GradientDrawable
            if(true) {
                //同时设置四个角
                GradientDrawable drawable = new GradientDrawable();
                drawable.setShape(GradientDrawable.RECTANGLE);
                drawable.setCornerRadius(radius);
                drawable.setColor(0xFFEEA2A4);
                ((ImageView) getView(R.id.image_view_4)).setImageDrawable(drawable);
            } else {
                //单独设置四个角
                GradientDrawable drawable = new GradientDrawable();
                drawable.setShape(GradientDrawable.RECTANGLE);
                drawable.setColor(0xFFEEA2A4);
                float[] radii = new float[]{
                        radius, radius,
                        0F, 0F,
                        0F, 0F,
                        radius, radius
                };
                drawable.setCornerRadii(radii);
                ((ImageView) getView(R.id.image_view_4)).setImageDrawable(drawable);
            }

实现方法:GradientDrawable

1)对GradientDrawable设置圆角drawable.setCornerRadius(radius)

2)或者对GradientDrawable设置float[],对4角单独设置

float[] radii = new float[]{
        radius, radius,
        0F, 0F,
        0F, 0F,
        radius, radius
    };
drawable.setCornerRadii(radii);

方法特点:GradientDrawable

1)对图片进行设置

2)可对4角同时设置,也可对4角单独设置

实现方法:RoundedBitmapDrawable

RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(getResources(),
                    ResourceUtils.drawable2Bitmap(ResourceUtils.getDrawable(R.drawable.drawable_90_corner_2)));
drawable.setCornerRadius(radius);
((ImageView) getView(R.id.image_view_4_2)).setImageDrawable(drawable);

1)通过RoundedBitmapDrawableFactory创建RoundedBitmapDrawable,提供了三个实现方法:

public static RoundedBitmapDrawable create(@NonNull Resources res, @Nullable Bitmap bitmap)
public static RoundedBitmapDrawable create(@NonNull Resources res, @NonNull String filepath)
public static RoundedBitmapDrawable create(@NonNull Resources res, @NonNull InputStream is) 

区别在于第2个参数:Bitmap、filepath、InputStream

2)对RoundedBitmapDrawable设置setCornerRadius(radius)

方法特点:RoundedBitmapDrawable

1)对图片进行设置

2)对4个角同时设置,不能单独设置单个角

方法5:3方库,本例用Glide

            //Glide
            if(true) {
                //同时设置四个角
                Glide.with(this)
                        .asDrawable()
                        .load(R.drawable.drawable_90_corner)
                        .transform(new RoundedCorners(radius))
                        .into((ImageView) getView(R.id.image_view_5));
            } else {
                //单独设置四个角
                Glide.with(this)
                        .asDrawable()
                        .load(R.drawable.drawable_90_corner)
                        .transform(new GranularRoundedCorners(radius, radius, radius, radius))
                        .into((ImageView) getView(R.id.image_view_5));
            }

实现方法:

1)引入Glide,使用Glide加载图片

2)设置transform(new RoundedCorners(radius))或者transform(new GranularRoundedCorners(radius, radius, radius, radius))

方法特点:

1)对图片进行设置

2)可对4角同时设置,也可对4角单独设置,只是方法不同

不同方法效果对比:

代码地址:

AndroidJavaKotlin: 深度学习Android、Java、Kotlin (gitee.com)

总结

到此这篇关于Android圆角设置方法的文章就介绍到这了,更多相关Android圆角设置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Flutter 日历组件简单实现

    Flutter 日历组件简单实现

    这篇文章主要为大家介绍了Flutter 日历组件简单实现的图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 在Android Studio中设置Button透明度的方法详解

    在Android Studio中设置Button透明度的方法详解

    本文将介绍在Android Studio中如何设置Button的透明度,首先,我们将展示实现该功能的整个流程,并使用表格列出每个步骤,然后,我们将详细说明每个步骤需要做什么,并提供相应的代码和注释,需要的朋友可以参考下
    2023-09-09
  • Android 8.0版本更新无法自动安装问题的解决方法

    Android 8.0版本更新无法自动安装问题的解决方法

    这篇文章主要为大家详细介绍了Android 8.0版本更新无法自动安装问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Kotlin操作符重载实例详解

    Kotlin操作符重载实例详解

    Kotlin允许我们为自己的类型提供预定义的一组操作符的实现,下面这篇文章主要给大家介绍了关于Kotlin操作符重载的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Android中ListView下拉刷新的实现代码

    Android中ListView下拉刷新的实现代码

    这篇文章主要介绍了Android中ListView下拉刷新的实现代码的相关资料,需要的朋友可以参考下
    2017-06-06
  • 详解Android如何获取进程总数,内存与任务列表

    详解Android如何获取进程总数,内存与任务列表

    在Android开发中,有时我们需要监控设备的性能,比如查看当前运行的进程总数,本文将介绍如何通过Android API获取这些信息,希望对大家有所帮助
    2025-02-02
  • Android实现支持进度条显示的短信备份工具类

    Android实现支持进度条显示的短信备份工具类

    这篇文章主要介绍了Android实现支持进度条显示的短信备份工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • android 如何判断当前是否为飞行模式

    android 如何判断当前是否为飞行模式

    android 开发过程中如何判断当前是否是飞行模式和侦听airplane mode change,本文将以此问题详细介绍,需要了解的朋友可以参考下
    2012-11-11
  • Android编程加密算法小结(AES、Base64、RAS加密算法)

    Android编程加密算法小结(AES、Base64、RAS加密算法)

    这篇文章主要介绍了Android编程加密算法,结合实例分析了AES、Base64及RAS加密算法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android编程实现换肤功能实例

    Android编程实现换肤功能实例

    这篇文章主要介绍了Android编程实现换肤功能的方法,结合实例形式较为详细的分析了Android换肤的具体步骤与相关技巧,需要的朋友可以参考下
    2015-12-12

最新评论