android 控件自定义属性,Android 自定义控件——自定义属性

本文介绍了如何在Android中自定义一个View,通过自定义属性来控制圆的半径、颜色和透明度。首先在attrs.xml中定义属性,然后在View的构造函数中通过TypedArray获取并初始化这些属性。最后,在XML布局文件中设置自定义属性,实现动态绘制。这种方法提高了代码的可读性和扩展性。
摘要由CSDN通过智能技术生成

本文介绍在 Android 当中自定义控件使用自定义属性html

本文如下图为例进行讲解   如图:java

一个圆,咱们自定义一个View ,以画一个圆为例,以圆的半径、颜色、透明值 做为自定义属性来进行讲解android

6dd39a7f2cdf6f623f806e2f2d025237.png

先定义自定义的View,继承View,重载其三个构造方法   Circle.javacanvas

通常咱们的自定义属性也是在重载的构造方法中进行初始化,初始化以前咱们须要事先定义好属性文件,也能够一边写控件,一边分析需求来添加属性,根据上面提到的需求,咱们定义三个属性,半径、颜色、透明度ide

在values文件夹下新建 attrs.xml 定义三个属性布局

declare-styleabke 是专门用来定义属性集合的标签,attr  是具体的属性  attr 中的name是属性的名字,必须是独一无二的,format是属性的类型post

经常使用的属性类型有:spa

reference       资源类型,一般是@开头,例如@+id/xxxx,@id/xxxxx

string             字符串类型,一般是文字信息

dimension      浮点类型,一般是尺寸度量,单位有不少px,dp,sp,dip等

color              颜色类型,一般是颜色16进制代码,支持ARGB。

boolean         布尔类型,true和false

enum             枚举类型,一般是表明这个属性提供了几种值来进行选择,而且只能选择这几种中的一个

flag                与enum基本没有区别。

integer           整数类型,一般是整数code

定义好属性后,咱们在 Cricle 的构造方法中初始化属性,初始化属性用TypeArray  根据具体的类型来调用具体的get方法,get到的值就是咱们自定义属性设置的值,得不到返回一个默认值,若是不加自定义属性的话,这个圆也是彻底能够画出来的,可是你以为用属性设置参数方便和用java代码来设置参数哪一种更加方便,当让是属性的方式了,又快又方便,有省事,有使得java更具备扩展性。orm

public class Circle extends View {

private Paint mPaint = new Paint();

private int mColor;

private int mAlpha;

private float mRadius;

public Circle(Context context) {

super(context);

}

public Circle(Context context, AttributeSet attrs) {

super(context, attrs);

init(attrs);

}

public Circle(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init(attrs);

}

public void init(AttributeSet set) {

TypedArray mTypedArray = getContext().obtainStyledAttributes(set,

R.styleable.Circle);

mColor = mTypedArray.getColor(R.styleable.Circle_color, Color.BLACK);

mRadius = mTypedArray.getDimension(R.styleable.Circle_radius, 50);

mAlpha = mTypedArray.getInteger(R.styleable.Circle_alpha, 0);

mTypedArray.recycle();//回收,回收以后属性集attay不可用

mPaint.setDither(true);

mPaint.setAntiAlias(true);

mPaint.setStrokeWidth(10);

mPaint.setColor(Color.RED);

mPaint.setAlpha(mAlpha);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

canvas.drawCircle(600, 600, mRadius, mPaint);

canvas.save();

}

}

java写好以后就要在xml布局文件中给这个圆设置属性了

设置的属性可见

circle:alpha="255"

circle:radius="@dimen/circle_radius1"

circle:color="@color/circle_red"

circle 和 Cricle类没有关系,这是在xml文件中本身起名字,找到这一行

circle 是本身定义的名字,/apk/res/ 后面换成自已的自定义类的包名,声明完这句以后就能够在自定义控件中加属性了,格式是   本身名字:属性名="参数"

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

xmlns:circle="http://schemas.android.com/apk/res/com.example.test"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/circle_1"

android:layout_width="match_parent"

android:layout_height="match_parent"

circle:alpha="255"

circle:radius="@dimen/circle_radius1"

circle:color="@color/circle_red" />

写好以后运行,图就画出来了,改变参数后从新运行观察效果

若是你仍是想在 java 当中改变控件属性,这也都不是问题, 给相应的属性封装 set 方法,设置参数以后调用  invalidate()  重绘界面就ok了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值