要实现Android-Custom View严格保持在布局的自定义边界内,可以使用以下解决方法:
setWillNotDraw(false)
来确保Custom View会被绘制。public class CustomView extends View {
public CustomView(Context context) {
super(context);
setWillNotDraw(false);
}
}
onMeasure()
方法中,根据布局的宽度和高度来确定Custom View的实际大小,并确保它不超出布局的边界。@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int desiredWidth = ...; // 自定义宽度
int desiredHeight = ...; // 自定义高度
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
int width, height;
if (widthMode == MeasureSpec.EXACTLY) {
width = widthSize;
} else if (widthMode == MeasureSpec.AT_MOST) {
width = Math.min(desiredWidth, widthSize);
} else {
width = desiredWidth;
}
if (heightMode == MeasureSpec.EXACTLY) {
height = heightSize;
} else if (heightMode == MeasureSpec.AT_MOST) {
height = Math.min(desiredHeight, heightSize);
} else {
height = desiredHeight;
}
setMeasuredDimension(width, height);
}
onLayout()
方法中,根据布局的边界,计算Custom View的实际位置。@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
int width = right - left;
int height = bottom - top;
// 计算Custom View的实际位置
int customViewLeft = ...;
int customViewTop = ...;
int customViewRight = customViewLeft + width;
int customViewBottom = customViewTop + height;
layout(customViewLeft, customViewTop, customViewRight, customViewBottom);
}
onDraw()
方法中,绘制Custom View的内容。@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 在Custom View内部绘制内容
// ...
}
通过以上步骤,Custom View就能够严格保持在布局的自定义边界内了。