以下是关于“android-什么时候调用onsizechanged()?”的完整攻略:
onSizeChanged()方法
onSizeChanged()是Android View类中的一个方法,用于在View的大小发生变化时被调用。该方法的定义下:
protected void onSizeChanged(int w, int h, int oldw, int oldh)
其中,w和h表示View的新宽度和高度,oldw和oldh表示View的旧宽度和高度。
调用时机
onChanged()方法会在以下情况下被调用:
- View一次创建时,即在onCreate()方法之后,但在onDraw()方法之前。
2 View的大小发生变化时,如旋转屏幕、软键盘弹出等。
示例一:自定义View
以下是一个自定义View的示例,演示了onSizeChanged()方法的调用时机:
public class MyView extends View {
private Paint mPaint;
public MyView(Context context) {
super(context);
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, Math.min(getWidth(), getHeight()) / 2, mPaint);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.d("MyView", "onSizeChanged: w=" + w + ", h=" + h + ", oldw=" + oldw + ", oldh=" + oldh);
}
}
以上代码中,自定义了一个View,绘制了一个圆形。在onSizeChanged()方法中,打印了View的新宽度和高度以及旧宽度和高度。
示例二:自定义ViewGroup
以下是一个自定义ViewGroup的示例,演示了onSizeChanged()方法的调用时机:
public class MyViewGroup extends ViewGroup {
private Paint mPaint;
public MyViewGroup(Context context) {
super(context);
init();
}
public MyViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childCount = getChildCount();
int left = getPaddingLeft();
int top = getPaddingTop();
int right = getMeasuredWidth() - getPaddingRight();
int bottom = getMeasuredHeight() - getPaddingBottom();
for (int i = 0; i < childCount; i++) {
View child = getChildAt(i);
child.layout(left, top, right, bottom);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.d("MyViewGroup", "onSizeChanged: w=" + w + ", h=" + h + ", oldw=" + oldw + ", oldh=" + oldh);
}
}
以上代码中,自定义了一个ViewGroup,绘制了一个矩形。在onSizeChanged()方法中,打印了ViewGroup的新宽度和高度以及旧宽度和高度。
以上就是关于“android-什么时候调用onsizechanged()?”的完整攻略,通过这种方式可以在View或ViewGroup的大小发生变化时进行相应的处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android-什么时候调用onsizechanged()? - Python技术站