深圳幻海软件技术有限公司 欢迎您!

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

2023-03-01

方法1:OutlinegetView(R.id.image_view_1).setClipToOutline(true);getView(R.id.image_view_1).setOutlineProvider(newViewOutlineProvider(){@Overridepublicvoi

方法1:Outline

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

实现方法:

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

  1. <androidx.cardview.widget.CardView
  2. android:layout_width="match_parent"
  3. android:layout_height="100dp"
  4. android:layout_marginTop="@dimen/dp_6"
  5. app:cardCornerRadius="@dimen/dp_24"
  6. app:cardElevation="0dp"
  7. app:cardUseCompatPadding="false">
  8. <ImageView
  9. android:id="@+id/image_view_2"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"
  12. android:src="#93D5DC"/>
  13. </androidx.cardview.widget.CardView>

实现方法:

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

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

  1. app:cardCornerRadius="@dimen/dp_24"
  2. app:cardElevation="0dp"
  3. app:cardUseCompatPadding="false"

方法特点:

1)对View设置,可View、ViewGroup

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

方法3:自定义Drawable

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

实现方法:

1)自定义shape,设置radius

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

方法特点:

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

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

  1. <corners
  2. android:bottomLeftRadius="@dimen/dp_24"
  3. android:bottomRightRadius="@dimen/dp_24"
  4. android:topLeftRadius="@dimen/dp_24"
  5. android:topRightRadius="@dimen/dp_24"/>

方法4:GradientDrawable和RoundedBitmapDrawable

  1. //GradientDrawable
  2. if(true) {
  3. //同时设置四个角
  4. GradientDrawable drawable = new GradientDrawable();
  5. drawable.setShape(GradientDrawable.RECTANGLE);
  6. drawable.setCornerRadius(radius);
  7. drawable.setColor(0xFFEEA2A4);
  8. ((ImageView) getView(R.id.image_view_4)).setImageDrawable(drawable);
  9. } else {
  10. //单独设置四个角
  11. GradientDrawable drawable = new GradientDrawable();
  12. drawable.setShape(GradientDrawable.RECTANGLE);
  13. drawable.setColor(0xFFEEA2A4);
  14. float[] radii = new float[]{
  15. radius, radius,
  16. 0F, 0F,
  17. 0F, 0F,
  18. radius, radius
  19. };
  20. drawable.setCornerRadii(radii);
  21. ((ImageView) getView(R.id.image_view_4)).setImageDrawable(drawable);
  22. }

实现方法:GradientDrawable

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

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

  1. float[] radii = new float[]{
  2. radius, radius,
  3. 0F, 0F,
  4. 0F, 0F,
  5. radius, radius
  6. };
  7. drawable.setCornerRadii(radii);

方法特点:GradientDrawable

1)对图片进行设置

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

实现方法:RoundedBitmapDrawable

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

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

  1. public static RoundedBitmapDrawable create(@NonNull Resources res, @Nullable Bitmap bitmap)
  2. public static RoundedBitmapDrawable create(@NonNull Resources res, @NonNull String filepath)
  3. 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

  1. //Glide
  2. if(true) {
  3. //同时设置四个角
  4. Glide.with(this)
  5. .asDrawable()
  6. .load(R.drawable.drawable_90_corner)
  7. .transform(new RoundedCorners(radius))
  8. .into((ImageView) getView(R.id.image_view_5));
  9. } else {
  10. //单独设置四个角
  11. Glide.with(this)
  12. .asDrawable()
  13. .load(R.drawable.drawable_90_corner)
  14. .transform(new GranularRoundedCorners(radius, radius, radius, radius))
  15. .into((ImageView) getView(R.id.image_view_5));
  16. }

实现方法:

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)