安卓自定义控件,自定义控件属性

定义一个自己定制的控件,如下图的:
画一个有背景色的圆,圆中间可以输入文字

view的绘制离不开三个方法,onMeasure、layout(子方法onLayout)、draw(子方法onDraw),onMeasure测量控件大小,layout计算控件在屏幕的位置,draw绘制控件,想要自己的控件有什么形状,颜色,样式等,可以重写这三个方法

OK,开始贴代码

1、定义一个继承View的类,这是这个类的全部代码

package com.example.myview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {

public MyView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    // TODO Auto-generated constructor stub
}

public MyView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub
}

String text;

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);

    TypedArray typedArray = context.obtainStyledAttributes(attrs,
            R.styleable.MytextView);

    text=typedArray.getString(R.styleable.MytextView_Text);
    typedArray.recycle();
}

public MyView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // TODO Auto-generated method stub
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

@Override
public void layout(int l, int t, int r, int b) {
    // TODO Auto-generated method stub
    super.layout(l, t, r, b);
}


@Override
public void draw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.draw(canvas);
}

//
@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);

    Paint paint=new Paint();
    paint.setColor(Color.GREEN);

    canvas.drawCircle(150, 150, 150, paint);
    paint.setColor(Color.RED);
    //可以定义一个字体大小属性
    paint.setTextSize(30);
    canvas.drawText(text, 150, 150, paint);

}

}

2、先看ondraw方法中

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);

    Paint paint=new Paint();
    paint.setColor(Color.GREEN);

    canvas.drawCircle(150, 150, 150, paint);
    paint.setColor(Color.RED);
    //可以定义一个字体大小属性
    paint.setTextSize(30);
    canvas.drawText(text, 150, 150, paint);

}

传进来一个画布对象,先实例化一支画笔paint,定义颜色,画一个圆;再在圆上写字,若要像TextView一样可在xml中通过android:text=”hello world”自定义输入文字,可为控件定义一个属性(如Text)由构造方法传入的参数获得xml中输入的文本,并绘制到控件中,过程如下:

3、在res下的values文件夹中新建一个attrs的xml文件,名字别错了(attrs),定义属性,
属性名为“Text”,类型为String

4、在构造器中取得Text属性的文本

String text;

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);

    TypedArray typedArray = context.obtainStyledAttributes(attrs,
            R.styleable.MytextView);

    text=typedArray.getString(R.styleable.MytextView_Text);
    typedArray.recycle();
}

取得的变量text就是,可将它通过onDraw绘制到视图中

5、控件定义完成了,接下来就是在xml中使用控件了

这里写图片描述

图中已标出,声明命名空间,再使用属性。
这是自定义控件的基础,希望对初学者能有帮助,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值