前言
作为一名安卓开发,也被称为大前端,做一个美观的界面,是我们必备的基础技能,可能在开发中我们最常用的是系统自带的View,因为他能满足绝大部分需求,难一点的我们也可以上Github上找个三方库使用,少数情况下会让我们进行自定义View,当然这不代表着我们可以不去掌握其原理,因为它是通往中高级程序员的必经之路,也是大厂面试的热门知识,只有熟练掌握其核心原理,才能让我们在后续的开发中游刃有余。
由于这是开篇文章,说的有点多,笔者是想借着写博客的机会,把那些最不经意的基础打牢一下,并且加上自己的拙见与大家分享,共同进步。
自定义View简介
自定义View是Android开发中的一种常见需求,它允许开发者创建复杂的用户界面组件,以满足特定的设计需求。自定义View的好处在于可以完全控制View的外观和行为。常见的是 extend View
和 extend ViewGroup
以及系统自带的View。
1. onMeasure
onMeasure
方法用于测量View的尺寸。它的主要任务是决定View的宽度和高度。以下是一个简单的自定义View示例,它在onMeasure
中实现了固定大小的测量逻辑。
示例代码
public class CustomView extends View {
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 期望的宽高
int desiredWidth = 200;
int desiredHeight = 200;
// 获取父View提供的宽高
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
// 测量宽度
width = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY ?
width : desiredWidth;
// 测量高度
height = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY ?
height : desiredHeight;
// 设置测量后的宽高
setMeasuredDimension(width, height);
}
}
2. onDraw
onDraw
方法用于绘制View的内容。在此方法中,使用Canvas绘制图形或文字。
示例代码
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint(); // 创建画笔
paint.setColor(C