android中可能遇到很多需求要求自定义view,一般github上都有各种各样的酷炫效果自定义view,特别是仪表盘,柱状图,饼状图都有,但还是不免遇到一些特别的需求,自定义样式难以修改开源库,因此还是需要自己来实现。接下来记录自己一点一点学习自定义view的过程。接下来主要实现这样的效果(简单的实现画圆,和简单的动画效果) 项目目录结构
构造方法用来初始化view,一般的定义的view比如圆的宽,高,圆的颜色等,都是在我们xml文件中配置的,因此,我们必须重写带有AttributeSet的构造方法
/** * 当需要在xml中声明此控件,则需要实现此构造函数 * 并且在构造函数中把自定义的属性与控件的数据成员连接起来 * * @param context * @param attrs */ public View1(Context context, AttributeSet attrs) { super(context, attrs); //如果xml文件中没有文件,则使用后面默认值; paintOut = new Paint(); paintIn=new Paint(); //从attrs读取属性 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyView1); this.cicle_in_color = typedArray.getColor(R.styleable.MyView1_cicle_in_color, Color.BLACK); this.cicle_in_radius = typedArray.getDimension(R.styleable.MyView1_cicle_in_radius, 100); this.cicle_in_StrokeWidth = typedArray.getDimension(R.styleable.MyView1_cicle_in_StrokeWidth, 5); this.cicle_out_color = typedArray.getColor(R.styleable.MyView1_cicle_out_color, Color.BLACK); this.cicle_out_radius = typedArray.getDimension(R.styleable.MyView1_cicle_out_radius, 30); this.cicle_out_StrokeWidth = typedArray.getDimension(R.styleable.MyView1_cicle_out_StrokeWidth, 5); //打开抗锯齿 paintOut.setAntiAlias(true); //设置xml文件中的属性 paintOut.setColor(cicle_out_color); paintOut.setStyle(Paint.Style.STROKE); paintOut.setStrokeWidth(cicle_out_StrokeWidth); paintIn.setColor(cicle_in_color); paintIn.setStyle(Paint.Style.STROKE); paintIn.setStrokeWidth(cicle_in_StrokeWidth); //回收TypedArray,以便后面重用 typedArray.recycle(); }在values下新建attrs.xml文件
<?xml version="1.0" encoding="utf-8"?><resources> //自定义属性名,定义公共属性 <attr name="textSize" format="dimension"></attr> <attr name="textTitle" format="string"></attr> <attr name="textColor" format="color"></attr> <attr name="cicle_color" format="color"></attr> <attr name="cicle_radius" format="dimension"></attr> <declare-styleable name="MyView1"> <attr name="cicle_color"></attr> <attr name="cicle_out_color" format="color"></attr> <attr name="cicle_out_radius" format="dimension"></attr> <attr name="cicle_out_StrokeWidth" format="dimension"></attr> <attr name="cicle_in_color" format="color"></attr> <attr name="cicle_in_radius" format="dimension"></attr> <attr name="cicle_in_StrokeWidth" format="dimension"></attr> </declare-styleable> <declare-styleable name="MyView2"> <attr name="textSize"></attr> <attr name="textTitle"></attr> <attr name="textColor"></attr> <attr name="cicle_color"></attr> <attr name="cicle_StrokeWidth" format="dimension"></attr> <attr name="cicle_radius"></attr> </declare-styleable></resources>这样,就可以在界面的xml文件中配置这些属性,添加命名空间和声明的属性名称
新闻热点
疑难解答