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类中的日志语句都不匹配)。仔细查看您的代码,确保您查看的是日志中的正确日志语句。