美文网首页
自定义布局控件-圆形RelativeLayout

自定义布局控件-圆形RelativeLayout

作者: 对影成三人_bac5 | 来源:发表于2018-11-14 14:01 被阅读0次

    一、创建自定义类

    package com.test.circularlayout;

    import android.content.Context;

    import android.content.res.TypedArray;

    import android.graphics.Canvas;

    import android.graphics.Paint;

    import android.util.AttributeSet;

    import android.widget.RelativeLayout;

    public class CircleRelativeLayout extends RelativeLayout {

        private int color;

        private int[] colors;

        private int alpha;

        public CircleRelativeLayout(Context context) {

            super(context);

        }

        public CircleRelativeLayout(Context context, AttributeSet attrs) {

            super(context,attrs);

            init(context,attrs);

            setWillNotDraw(false);

        }

        private void init(Context context, AttributeSet attrs) {

            TypedArray array = context.obtainStyledAttributes(attrs,

                    R.styleable.CircleRelativeLayoutLayout);

            color = array.getColor(R.styleable.CircleRelativeLayoutLayout_background_color,0X0000000);

            alpha = array.getInteger(R.styleable.CircleRelativeLayoutLayout_background_alpha,100);

            setColors();

            array.recycle();

        }

        @Override

        protected void onDraw(Canvas canvas) { //构建圆形

            int width = getMeasuredWidth();

            Paint mPaint = new Paint();

            mPaint.setARGB(alpha,colors[0],colors[1],colors[2]);

            mPaint.setAntiAlias(true);

            float cirX = width / 2;

            float cirY = width / 2;

            float radius = width / 2;

            canvas.drawCircle(cirX, cirY, radius, mPaint);

            super.onDraw(canvas);

        }

        public void setColor(int color) { //设置背景色

            this.color = color;

            setColors();

            invalidate();

        }

        public void setAlhpa(int alhpa) { //设置透明度

            this.alpha = alhpa;

            invalidate();

        }

        public void setColors() {

            int red = (color & 0xff0000) >> 16;

            int green = (color & 0x00ff00) >> 8;

            int blue = (color & 0x0000ff);

            this.colors = new int[]{red,green,blue};

        }

    }

    二、添加自定义属性 values/attr.xml

    <?xml version="1.0" encoding="utf-8"?>

    <resources>

        <declare-styleable name="CircleRelativeLayoutLayout">

            <attr name="background_color" format="color" />

            <attr name="background_alpha" format="integer" />

        </declare-styleable>

    </resources>

    三、布局文件引用

    <?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

        xmlns:circle="http://schemas.android.com/apk/res-auto"

        android:id="@+id/activity_main"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        tools:context="com.test.circularlayout.MainActivity">

        <com.test.circularlayout.CircleRelativeLayout

            android:layout_margin="5dp"

            android:layout_width="100dp"

            android:layout_height="100dp">

            <TextView

                android:textColor="#ffffff"

                android:text="默认的颜色"

                android:layout_centerInParent="true"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content" />

        </com.test.circularlayout.CircleRelativeLayout>

        <com.test.circularlayout.CircleRelativeLayout

            circle:background_color="#3838e4"

            circle:background_alpha="100"

            android:layout_marginLeft="110dp"

            android:layout_marginTop="5dp"

            android:layout_width="90dp"

            android:layout_height="90dp">

            <TextView

                android:textColor="#ffffff"

                android:text="自定义"

                android:layout_centerInParent="true"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content" />

        </com.test.circularlayout.CircleRelativeLayout>

        <com.test.circularlayout.CircleRelativeLayout

            android:id="@+id/crlayout"

            android:layout_marginLeft="210dp"

            android:layout_marginTop="5dp"

            android:layout_width="80dp"

            android:layout_height="80dp">

            <TextView

                android:textColor="#ffffff"

                android:text="代码设置"

                android:layout_centerInParent="true"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content" />

        </com.test.circularlayout.CircleRelativeLayout>

    </RelativeLayout>

    四、获取和设置控件

    public class MainActivity extends Activity {

        CircleRelativeLayout crlayout;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            crlayout = (CircleRelativeLayout) findViewById(R.id.crlayout);

            crlayout.setColor(getResources().getColor(R.color.colorAccent));

            crlayout.setAlhpa(160);

        }

    }

    相关文章

      网友评论

          本文标题:自定义布局控件-圆形RelativeLayout

          本文链接:https://www.haomeiwen.com/subject/gffjfqtx.html