话说,不会写自定义View的程序员不是好司机!今天就来简单介绍一下自定义view,参考了别人的一个电池充电动画的自定义view,附上这位大神的源码,并致谢!
进入正题,自定义view大概有一下几个步骤:
- 新建view,继承view或者surfaceview, 声明自定义view属性
- 在自定义view的构造方法中,获取属性值
- 复写onMeasure,onDraw,绘制view
- 在布局文件中,引用该view即可
第一步:声明
资源文件:res/value/attrs.xml
<declare-styleable name="BatteryLoadingView">
<attr name="outBWidth" format="dimension"/>
<attr name="outBHeight" format="dimension"/>
<attr name="bRadius" format="float"/>
<attr name="backgroundColor" format="color"/>
<attr name="bColor" format="color"/>
</declare-styleable>
declare-styleable的name属性一般与自定义View的类名一致,试验了一下,也可以不一致,为规范起见,最好一致!
声明的这些属性,在布局引用该View的时候就可以指定数值了。
<BatteryView
android:layout_width="100dp"
android:layout_height="50dp"
android:padding="10dp"
app:bColor="@android:color/holo_blue_dark"
app:bRadius="10"
app:backgroundColor="#eeeeee" />
第二步:获取属性值
在自定义View的构造方法中获取到指定属性的值
bwidth = attrArray.getDimensionPixelSize(R.styleable.BatteryLoadingView_outBWidth, bwidth);
bheight = attrArray.getDimensionPixelSize(R.styleable.BatteryLoadingView_outBHeight, bheight);
bColor = attrArray.getColor(R.styleable.BatteryLoadingView_bColor, Color.GREEN);
backgroundColor = attrArray.getColor(R.styleable.BatteryLoadingView_backgroundColor, Color.WHITE);
bRadius = attrArray.getFloat(R.styleable.BatteryLoadingView_bRadius, 9f);
attrArray.recycle();
获取值得方法中有两个参数,
第一个 :属性名,注意格式R.styleable.声明的viewname_属性名;
第二个 :属性的缺省值;
第三步:绘制
绘制时主要用到的类:
Paint: 画笔
Cavans:画布
MeasureSpec:尺子
跟真实画画是不是可像,像就对了,人类的思维就这样
new一个画笔
paintS = new Paint();
paintF = new Paint();
paintS.setColor(bColor);
paintF.setColor(bColor);
paintS.setStyle(Paint.Style.STROKE);
paintS.setStrokeWidth(6);
——————–待续————————————