Android 继承 View 重写函数详解及示例
继承 Android View 类后,需要重写一些函数来实现自定义 View 的功能。以下是四个需要重写的关键函数,并附上示例代码进行解释。
- onMeasure(int widthMeasureSpec, int heightMeasureSpec)
该方法用于测量 View 的大小,需要传入两个参数:widthMeasureSpec 和 heightMeasureSpec,分别表示宽度和高度的测量规格。在该方法中需要调用 setMeasuredDimension() 方法来设置 View 的实际大小。
示例:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(width, height);
}
- onDraw(Canvas canvas)
该方法用于绘制 View 的内容,需要传入一个 Canvas 对象作为参数,在该方法中可以使用 Canvas 绘制各种图形、文本等内容。
示例:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, getWidth() / 2, paint);
}
- onLayout(boolean changed, int left, int top, int right, int bottom)
该方法用于确定 View 在父布局中的位置,需要传入四个参数:changed 表示 View 的大小或位置是否发生了变化,left、top、right、bottom 表示 View 在父布局中的左上右下位置。
示例:
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
// 设置 View 在父布局中居中
int width = right - left;
int height = bottom - top;
int parentWidth = ((ViewGroup) getParent()).getWidth();
int parentHeight = ((ViewGroup) getParent()).getHeight();
int x = (parentWidth - width) / 2;
int y = (parentHeight - height) / 2;
layout(x, y, x + width, y + height);
}
- onTouchEvent(MotionEvent event)
该方法用于处理 View 的触摸事件,需要传入一个 MotionEvent 对象作为参数,在该方法中可以根据事件的类型进行相应的处理。
示例:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 手指按下时改变 View 的颜色
setBackgroundColor(Color.BLUE);
break;
case MotionEvent.ACTION_UP:
// 手指松开时恢复 View 的颜色
setBackgroundColor(Color.WHITE);
break;
}
return true;
}
通过重写这些函数,可以实现各种自定义 View 的功能,例如:
- 自定义按钮
- 自定义进度条
- 自定义图表
- 自定义动画效果
希望本文能帮助您更好地理解 Android View 类的继承和重写。
原文地址: https://www.cveoy.top/t/topic/oElQ 著作权归作者所有。请勿转载和采集!