How to make a view with rounded corners?

前端 未结 20 1010
遇见更好的自我
遇见更好的自我 2020-11-27 11:08

I am trying to make a view in android with rounded edges. The solution I found so far is to define a shape with rounded corners and use it as the background of that view.

相关标签:
20条回答
  • 2020-11-27 11:27

    You can use an androidx.cardview.widget.CardView like so:

    <androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"       
            app:cardCornerRadius="@dimen/dimen_4"
            app:cardElevation="@dimen/dimen_4"
            app:contentPadding="@dimen/dimen_10">
    
           ...
    
    </androidx.cardview.widget.CardView>
    

    OR

    shape.xml

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
    
        <solid android:color="#f6eef1" />
    
        <stroke
            android:width="2dp"
            android:color="#000000" />
    
        <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
    
        <corners android:radius="5dp" />
    
    </shape>
    

    and inside you layout

    <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/shape">
    
            ...
    
    </LinearLayout>
    
    0 讨论(0)
  • 2020-11-27 11:30

    Create a xml file called round.xml in the drawable folder and paste this content:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
      <solid android:color="#FFFFFF" />
      <stroke android:width=".05dp" android:color="#d2d2d2" />
      <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp"/>
    </shape>
    

    then use the round.xml as background to any item. Then it will give you rounded corners.

    0 讨论(0)
  • 2020-11-27 11:30
    public class RoundedCornerLayout extends FrameLayout {
        private double mCornerRadius;
    
        public RoundedCornerLayout(Context context) {
            this(context, null, 0);
        }
    
        public RoundedCornerLayout(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public RoundedCornerLayout(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init(context, attrs, defStyle);
        }
    
        private void init(Context context, AttributeSet attrs, int defStyle) {
            DisplayMetrics metrics = context.getResources().getDisplayMetrics();
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
    
        public double getCornerRadius() {
            return mCornerRadius;
        }
    
        public void setCornerRadius(double cornerRadius) {
            mCornerRadius = cornerRadius;
        }
    
        @Override
        public void draw(Canvas canvas) {
            int count = canvas.save();
    
            final Path path = new Path();
            path.addRoundRect(new RectF(0, 0, canvas.getWidth(), canvas.getHeight()), (float) mCornerRadius, (float) mCornerRadius, Path.Direction.CW);
            canvas.clipPath(path, Region.Op.REPLACE);
    
            canvas.clipPath(path);
            super.draw(canvas);
            canvas.restoreToCount(count);
        }
    }
    
    0 讨论(0)
  • 2020-11-27 11:31
    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
    
            Bitmap roundedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
                    .getHeight(), Config.ARGB_8888);
            Canvas canvas = new Canvas(roundedBitmap);
    
            final int color = 0xff424242;
            final Paint paint = new Paint();
            final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
            final RectF rectF = new RectF(rect);
            final float roundPx = pixels;
    
            paint.setAntiAlias(true);
            canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
            canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
    
            paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
            canvas.drawBitmap(bitmap, rect, rect, paint);
    
            return roundedBitmap;
        }
    
    0 讨论(0)
  • 2020-11-27 11:32

    In case you want to round some specific corner.

    fun setCorners() {
            
            val mOutlineProvider = object : ViewOutlineProvider() {
                override fun getOutline(view: View, outline: Outline) {
    
                    val left = 0
                    val top = 0;
                    val right = view.width
                    val bottom = view.height
                    val cornerRadiusDP = 16f
                    val cornerRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, cornerRadiusDP, resources.displayMetrics).toInt()
    
                    // all corners
                    outline.setRoundRect(left, top, right, bottom, cornerRadius.toFloat())
    
                    /* top corners
                    outline.setRoundRect(left, top, right, bottom+cornerRadius, cornerRadius.toFloat())*/
    
                    /* bottom corners
                    outline.setRoundRect(left, top - cornerRadius, right, bottom, cornerRadius.toFloat())*/
    
                    /* left corners
                    outline.setRoundRect(left, top, right + cornerRadius, bottom, cornerRadius.toFloat())*/
    
                    /* right corners
                    outline.setRoundRect(left - cornerRadius, top, right, bottom, cornerRadius.toFloat())*/
    
                    /* top left corner
                    outline.setRoundRect(left , top, right+ cornerRadius, bottom + cornerRadius, cornerRadius.toFloat())*/
    
                    /* top right corner
                    outline.setRoundRect(left - cornerRadius , top, right, bottom + cornerRadius, cornerRadius.toFloat())*/
    
                    /* bottom left corner
                    outline.setRoundRect(left, top - cornerRadius, right + cornerRadius, bottom, cornerRadius.toFloat())*/
    
                    /* bottom right corner
                    outline.setRoundRect(left - cornerRadius, top - cornerRadius, right, bottom, cornerRadius.toFloat())*/
    
                }
            }
    
            myView.apply {
                outlineProvider = mOutlineProvider
                clipToOutline = true
            }
        }
    
    0 讨论(0)
  • 2020-11-27 11:35

    try this property with your linear layout it will help
    tools:context=".youractivity"

    0 讨论(0)
提交回复
热议问题