为什么ondraw()不能访问mypaint?

hgtggwj0  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(344)

我正在创建一个简单的画一个圆使用 Canvas 以及 Paint .
我注意到当我创建变量时 myPaint 外部 init() ,一切正常;由以下代码说明:

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);
    }
}

然而,当我做同样的事情,而是创造 myPaint 内部 init() ,我得到一个错误 myPaintonDraw() ; 由以下代码说明:

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);
}
}

为什么会这样?谢谢!

fae0ux8s

fae0ux8s1#

在代码b中,您定义的是一个局部变量,它只能在定义它的代码块(即 init 方法)。相反,代码a定义了一个属性,该属性可以在对象内部访问,并与对象并排离开。
你也可以看看这个。
示例变量在类中声明,但在方法外部声明。为堆中的对象分配空间时,将为每个示例变量值创建一个槽。示例变量包含必须由多个方法、构造函数或块引用的值,或必须在整个类中出现的对象状态的基本部分。
局部变量在方法、构造函数或块中声明。局部变量是在输入方法、构造函数或块时创建的,一旦退出方法、构造函数或块,该变量将被销毁。

相关问题