La configuración de Android con esquinas redondeadas es suficiente para leer un artículo

Método 1: Esquema

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);
    }
});

Implementación:

1) View.setClipToOutline(true) para establecer esquinas redondeadas

2) View.setOutlineProvider (proveedor de ViewOutlineProvider) para establecer esquinas redondeadas

ViewOutlineProvider solo tiene un método abstracto, que establece esquinas redondeadas a través de Outline.setRoundRect:

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

Características del método:

1) Para ver la configuración, puede ver, ViewGroup

2) Configure 4 esquinas al mismo tiempo, no puede configurar una sola esquina por separado

Método 2: vista de tarjeta

        <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>

Implementación:

1) Para la Vista que necesita establecer esquinas redondeadas, envuélvala con CardView

2) Para la configuración de CardView, establezca esquinas redondeadas, elimine sombras y relleno

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

Características del método:

1) Para ver la configuración, puede ver, ViewGroup

2) Configure 4 esquinas al mismo tiempo, no puede configurar una sola esquina por separado

Método 3: Dibujable personalizado

<?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>

Implementación:

1) Personaliza la forma, establece el radio

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

Características del método:

1) Establecer la imagen generada

2) Se puede configurar para 4 esquinas al mismo tiempo, o se puede configurar por separado para 4 esquinas

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

Método 4: GradientDrawable y 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);
            }

Método de implementación: GradientDrawable

1) Establezca la esquina redondeada dibujable.setCornerRadius (radio) para GradientDrawable

2) O configure float[] para GradientDrawable, configure por separado para 4 esquinas

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

Características del método: GradientDrawable

1) Establecer la imagen

2) Se puede configurar para 4 esquinas al mismo tiempo, o se puede configurar por separado para 4 esquinas

Método de implementación: 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) Cree RoundedBitmapDrawable a través de RoundedBitmapDrawableFactory, que proporciona tres métodos de implementación:

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) 

La diferencia radica en el segundo parámetro: mapa de bits, ruta de archivo, InputStream

2) Establezca setCornerRadius (radio) para RoundedBitmapDrawable

Características del método: RoundedBitmapDrawable

1) Establecer la imagen

2) Configure 4 esquinas al mismo tiempo, no puede configurar una sola esquina por separado

Método 5: biblioteca de terceros, este ejemplo usa 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));
            }

Implementación:

1) Presente Glide, use Glide para cargar imágenes

2) Establecer transformación (nuevas esquinas redondeadas (radio)) o transformación (nuevas esquinas redondeadas granulares (radio, radio, radio, radio))

Características del método:

1) Establecer la imagen

2) Se puede configurar para las 4 esquinas al mismo tiempo, o se puede configurar por separado para las 4 esquinas, pero el método es diferente

Comparación de los efectos de diferentes métodos:

 

Código de dirección:

AndroidJavaKotlin: Android de aprendizaje profundo, Java, Kotlin (gitee.com)

Supongo que te gusta

Origin blog.csdn.net/zhiyuan263287/article/details/127624728
Recomendado
Clasificación