关于android 自定义view的绘制,学习将近一周了。我学习知识有个特点,就是先要了解大体的知识架构才能深入专研细节,这样的学习代价是很大的,耗时间,学习成本也很高,效率也很低,以至于到昨天我才真正学习了一个具体的知识点。
先总结一下总体的思路架子。view自带的方法有很多,我们要实现自定义的view,一般情况要重写onMeasure,onLayout,onDraw。分别是测量,布局,绘制。还有自定义的参数设置Typearray。掌握这四种基本掌握了自定义view的入门基础本事。之后还要涉及动画,视图(view)动画(在onDraw内就可以完成),属性动画ObjectAnimator动画,帧动画。
现在记录一些昨天写的代码段及理解,其实自己都没怎么懂。
//设置画笔
paint = new TextPaint();
paint.setColor(getResources().getColor(R.color.colorAccent));
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);//设置为抗锯齿
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(3 * density);
//获取屏幕宽长度
int witch = canvas.getWidth();
int hight = canvas.getHeight();
或者是
float sw = this.getMeasuredWidth();
float sh = this.getMeasuredHigth();
//开始设置画布
//HSpace(横线宽度)和space是横线间距,自己设置
if (startX >= 0 ) {
startX =-(hSpace + space);
} else {
startX += delta;
}
float start = startX;
// draw latter parse
while (start < sw) {
canvas.drawLine(start, 105, start + hSpace,105, paint);
start += (hSpace + space);
}
//刷新
invalidate();
关键的代码思路是选择一个起始点startX做判断,startX是自增长的,或者自减少。然后将他赋值给绘制的第一轮start,使用while判断的绘制一轮,然后刷新重新进入startx判断,使其变化后在赋值到start,用while进入第二轮,就这样下去,一直在进行绘制,是画面达到动态效果。如果去掉startX这个参数,只是使用start,使用while绘制一轮,那么显示的就是一个静态的画面。