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)