经过第一篇的讲解我们基本知道自定义view的开发流程和参数属性,这里就来看一下我们自定义view必不可少的两个方法。但是我们不要忘了我们自定义view学习的过程,有了这个过程,我们才知道我们要学什么,该学什么,从哪里学起。
1.自定义view单纯的用画笔绘制view(死view)
2.自定义view增加手势
3.自定义view增加动画
4.自定义view手势动画交互 这4步让我们一步一步的来探索学习
这个过程我们要时刻谨记于心呀,时刻要知道自己处在哪个阶段,接下来应该学习什么,这样我们才会进步,才不会乱学一气,走火入魔呀。哈哈不扯了。
其实必不可少的方法就两个,一个是测量view的方法onMersure()和绘制view的方法onDraw();
这两个方法是非常非常重要的然后就是这两个方法中的参数,那也是灵魂所在。
1.首先看下onMersure()方法,这个方法的作用就是测量我们的view的尺寸。
具体怎么测量我们要引入一个类 MeasureSpec 这个类中有三个属性,分别为
1.MeasureSpec.AT_MOST
这个属性就是我们在布局文件中设置了wrap_content就是没有对view设置具体的宽高尺寸
2.MeasureSpec.EXACTLY
这个属性就是我们对布局中的 view设置了具体的宽高尺寸即:
android:layout_width="200dp"
android:layout_height="200dp" 或者 match_parent,有具体的值
3.MeasureSpec.UNSPECIFIED
这个属性就是对view没有限制,用的少
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
这个方法就是获得当前view的MeasureSpec的类型,和1,2,3作比较。判断当前的view是否设置了具体的宽高尺寸:
int widthSize= MeasureSpec.getSize(widthMeasureSpec);
int heightSize= MeasureSpec.getSize(heightMeasureSpec);
这是获得view的尺寸、例子:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize= MeasureSpec.getSize(widthMeasureSpec);
int heightSize= MeasureSpec.getSize(heightMeasureSpec);
if (widthMode==MeasureSpec.AT_MOST&&heightMode==MeasureSpec.AT_MOST){
widthSize = R.dimen.pwidth;
heightSize = R.dimen.pheight;
}
//把宽高尺寸设置到view中去
setMeasuredDimension(widthSize,heightSize);
}
这里就是我们对 view 的宽高的测量了。然后就是拿到这个宽高 到 onDraw()方法里面去使用:
2.onDraw()方法的使用
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
这里就是我们绘制view的地方,,canvas 就是 画布。拿到上面的宽高到此方法中去绘制 我们的view的形状和尺寸。
其中有这两个方法重画我们的view:
postInvalidate(); 这个方法针对子view,重画
invalidate(); 这个就是重画我们的view
通过这两篇的讲解,下一篇就能开始我们的自定义view 的 实战例子了,,,加油---期待下一篇,更新中。。