自绘控件的内容都是自己绘制出来的 大致流程如下:
1.定义一个类继承view
1.使用TypedArray初始化属性集合
在view的构造方法中 有一个AttributeSet的参数 很明显是用来保存控件属性信息的 我们也的确可以通过循环然后用键值对的方式获取信息 而TypedArray是用来简化我们的工作的
2.重写onMeasure 测量控件大小
3.重写onDraw 绘制控件
2.根据需求在attrs文件中自定义属性
declare-styleable 声明自定义属性可以自定义一个新属性也可以引用已经存在的属性两者的区别就是新属性需要添加format进行类型的定义
3.在activity的布局文件使用
自定义图片验证码 演示效果
示例代码
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.graphics.Rect; import android.util.AttributeSet; import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import java.util.Random; public class VerifyCode extends View { private String mCodeText;//文本内容 private int mCodeTextSize;//文本大小 private int mCodeLength;//验证码长度 private int mCodeBackground;//背景色 private boolean isContainChar;//验证码是否包含字母 private int mPointNum;//干扰点数 private int mLineNum;//干扰线数 private Paint mPaint;//画笔 private Rect mBound;//绘制范围 private Bitmap bitmap;//验证码图片 private static Random mRandom = new Random(); private static int mWidth;//控件的宽度 private static int mHeight;//控件的高度 public VerifyCode(Context context) { super(context); } public VerifyCode(Context context, AttributeSet attrs) { super(context, attrs); initAttrValues(context,attrs); initData(); } private void initAttrValues(Context context, AttributeSet attrs){ // //获取在AttributeSet中定义的 VerifyCode 中声明的属性的集合 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.VerifyCode); //获取TypeArray的长度 int count=typedArray.getIndexCount(); for (int i=0;i以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持考高分网!