android 自定义控件的过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
android 自定义控件的过程
invalidate()会导致computeScroll()以及onDraw()方法的执行computeScroll()方法是在屏幕流动的时候不停的去调用,scrollTo(int x,int y)则是滚动到相应的位置;
scrollBy(int x, int y)则是移动一些距离,X为正是向左移动,为负时向右移动,Y与X的意义一个,只是是上下移动而已View对象显示在屏幕上,有几个重要步骤:
1.构造方法创建对象
2.测量View的大小onMeasure(int,int);
3.确定View的位置,View自身有一些权,决定权在父View手中. onLayout();基本上不常用,在继承View的时候基本上用不着,但在继承ViewGroup的时候的就要用到了,因为要对View进行布局,确定View的位置,确定的时候使用
指定子View的位置,左,上,右,下,是指在ViewGroup坐标系中的位置yout(int xtop,int ytop, int xbottom, int ybottom);
4.绘制View的内容onDraw(Canvas)
实现过程:
1、构造方法:
/**
* 在布局文件中声名的view,创建的时候由系统调用
*
* @param context
* 上下文对象
* @param attrs
* 属性集
*/
public MyToggleButton(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
2、测量View的大小:
/**
* 测量尺寸时的回调方法
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // super.onMeasure(widthMeasureSpec, heightMeasureSpec);
/**
* 设置当前View的大小Width:view的宽度Height: view的调度(单位:像素)
*/
setMeasuredDimension(backgroundBitmap.getWidth(),
backgroundBitmap.getHeight());
}
3、确定View的位置
1、这是继承View的时候,一般不需要进行处理
/**
* 确定位置的时候调用此方法自定义View的时候作用不大
*/
@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
2、这是继承ViewGroup的时候,这个时候就要确定ViewGroup里面各个View的位置了
/**
* 对子View 进行布局,确定子View的位置changed 若为true ,则说明布局发生了变化l\t\r\b
* 是指当前ViewGroup在其父View中的位置
*/
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
for (int i = 0; i < getChildCount(); i++) {
View view = getChildAt(i);// 依次取得下标为i的子View
// 指定子View的位置,左,上,右,下,是指在ViewGroup坐标系
中的位置
yout(i * getWidth(), 0, (i + 1) * getWidth(), getHeight());
}
}
4、绘制View的内容:
@Override
protected void onDraw(Canvas canvas) {
/**
* lefe 图片的左边界top 图片的上边界paint 绘制图片要使用的画笔
*/
// 绘制背景
canvas.drawBitmap(backgroundBitmap, 0, 0, paint);
// 绘制可滑动的按钮
canvas.drawBitmap(slideBtn, slideBtn_left, 0, paint); }