Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当访问分配的私有变量时,它们返回0_Java_Android_Colors_Private Members - Fatal编程技术网

Java 当访问分配的私有变量时,它们返回0

Java 当访问分配的私有变量时,它们返回0,java,android,colors,private-members,Java,Android,Colors,Private Members,我有一个扩展视图的类。下面是构造函数。在构造函数中,我给private int r,g,b赋值。分配了正确的值 public CanvasView(Context c, int r, int g, int b) { super(c); context = c; this.r = r; this.g = g; this.b = b; Log.i("RGB:", "r" + r + "g" + g + "b"

我有一个扩展视图的类。下面是构造函数。在构造函数中,我给
private int r,g,b赋值。分配了正确的值

public CanvasView(Context c, int r, int g, int b) {
        super(c);
        context = c;
        this.r = r;
        this.g = g;
        this.b = b;

    Log.i("RGB:", "r" + r + "g" + g + "b" + b); //logs correct values

}
在onDraw(见下文)中,当我访问这些值时,它们都是零

@Override
    protected void onDraw(final Canvas canvas) {
        super.onDraw(canvas);

        hsv = new float[3];

        Color.RGBToHSV(r, g, b, hsv);

        hsv[2] = getVal();

        Log.i("RGBdraw:", "r" + r + "g" + g + "b" + b); //values are all 0

        if (canvas != null){

            canvas.drawColor(Color.rgb(r, g, b));
        }



    }
我认为在分配私有变量时,它们可以在类范围内访问? 非常感谢您的帮助

编辑 这是一个最小的例子

在另一个类中,我创建了视图
CanvasView mCanvasView=newcanvasview(mContext,255,0,171)

下面是名为CanvasView的类,它是由上面的代码创建的。我将3个整数传递给CanvasView

public class CanvasView extends View {

private Context context;
private int r,g,b;

public CanvasView(Context c, int r, int g, int b) {
    super(c);
    context = c;
    this.r = r;
    this.g = g;
    this.b = b;

    Log.i("RGB:", "r" + r + "g" + g + "b" + b); //Correct values are logged

}

@Override
protected void onDraw(final Canvas canvas) {
    super.onDraw(canvas);

    Log.i("RGB draw:", "r" + r + "g"+g + "b"+b); //Values here are all 0

    if (canvas != null){
        canvas.drawColor(Color.rgb(r, g, b));
    }

}

}

而不是像在java中那样创建类:
CanvasView mCanvasView=newcanvasview(mContext,255,0,171)

以android方式创建类:
CanvasView mView=(CanvasView)findViewById(R.id.CanvasView)

然后对红-绿-蓝使用getter和setter

public void red(int r){
        this.r = r;
    }

    public int getRed(){
        return r;
    }

像这样传递值:
mView.red(255)

请发一封信。你想得对。所以请构造一个!请尝试调试您的代码。确保将onDraw(…)方法应用于使用上述构造函数创建的同一对象。如果对象相同,请使用debug了解变量在何处更改为0s。祝你好运@SotiriosDelimanolis I发布了完整的示例:)@HaloMediaz这样的事情几乎不可能发生。我确信您的日志语句被弄乱了(因为两个版本的CanvasView类中的日志语句都不匹配)。仔细查看您的代码,确保您查看的是日志中的正确日志语句。