Android 自定义布局控件-圆形RelativeLayout
16lz
2021-01-23
Android 自定义布局控件-圆形RelativeLayout
转自“姜徕”,原文链接:https://blog.csdn.net/jiang001002jay/article/details/61418338
效果图 :
创建自定义类:CircleRelativeLayout.java
package com.jzy.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"?>
- 布局文件
<?xml version="1.0" encoding="utf-8"?>
- 获取和设置控件
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); }}
更多相关文章
- Android中在Button控件上显示倒计时
- Android SwipeMenuRecyclerView控件的用法
- Android软键盘遮挡布局的那些事
- Android中将布局文件/View添加至窗口过程分析 ---- 从setContent
- 自定义控件:滑动开关按钮
- android九宫格锁屏控件
- 自定义控件:瀑布流水字母
- 修改Android中Layout布局文件字体的大小
- android圆形有边框无背景色