【问题标题】:Why can't onDraw() access myPaint?为什么 onDraw() 不能访问 myPaint?
【发布时间】:2021-07-14 03:31:13
【问题描述】:

我正在使用CanvasPaint 创建一个简单的圆图。

我注意到当我在init() 之外创建变量myPaint 时,一切正常;如下代码所示:

public class Drawing extends View {

    Paint myPaint;
    public Drawing(Context context) {
        super(context);
        init();
    }

    public void init(){
        myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        myPaint.setColor(Color.parseColor("yellow"));
    }


    @Override
    protected void onDraw(Canvas canvas) {

        canvas.drawCircle(getMeasuredWidth() /2, getMeasuredHeight() /2 , 100f, myPaint);
        super.onDraw(canvas);
    }
}

但是,当我做完全相同的事情,而是在 init() 内创建 myPaint 时,我在 onDraw() 中收到 myPaint 的错误;如下代码所示:

public class Drawing extends View {


public Drawing(Context context) {
    super(context);
    init();
}

public void init(){
    Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    myPaint.setColor(Color.parseColor("yellow"));
}


@Override
protected void onDraw(Canvas canvas) {

    canvas.drawCircle(getMeasuredWidth() /2, getMeasuredHeight() /2 , 100f, myPaint);
    super.onDraw(canvas);
}
}

为什么会这样?谢谢!

【问题讨论】:

标签: java android android-studio canvas scope


【解决方案1】:

在代码 B 中,您定义了一个局部变量,该变量只能在定义它的代码块内访问(在本例中为 init 方法)。相比之下,代码 A 定义了一个属性,该属性可在您的对象内部访问并与它并排放置。

你也可以看看this

实例变量在类中声明,但在方法之外。什么时候 为堆中的一个对象分配空间,每个实例都有一个槽 创建变量值。实例变量保存的值必须是 被多个方法、构造函数或块引用,或必不可少的 对象状态的一部分,必须存在于整个类中。

局部变量在方法、构造函数或块中声明。 局部变量是在方法、构造函数或块被创建时创建的 输入,一旦退出方法,变量将被销毁, 构造函数或块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多