Android - 如何使用 Canvas 在 OnDraw() 中设置自定义视图的宽度和高度?

问题描述

我正在尝试为使用 Canvas 绘制的自定义视图设置宽度和高度。

注意到 onDraw() 总是设置为认的宽度和高度,而不是使用 layout xml 中指定的值或使用 onMeasure 方法设置的值。

有人可以帮助我哪里出错了。

谢谢

@Override
protected void onMeasure(final int widthMeasureSpec,final int heightMeasureSpec) {
     super.onMeasure(widthMeasureSpec,heightMeasureSpec);
     setMeasuredDimension(getMeasuredWidth(),getMeasuredHeight());
}

解决方法

您可以使用此代码

public class CustomView extends View{
private Paint paint;
private int w;
private int h;

public CustomView(Context context,AttributeSet attr) {
    super(context,attr);
    paint = new Paint();
    paint.setTextAlign(Align.CENTER);
}

@Override
protected void onSizeChanged(int w,int h,int oldw,int oldh) {
    this.w = w;
    this.h = h;
    super.onSizeChanged(w,h,oldw,oldh);
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.WHITE);
    canvas.drawText("TEST",w/2,h/2,paint);   
}

}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...