无法访问活动类中没有静态的GLSurfaceview类中声明的变量

时间:2013-05-07 17:48:50

标签: java android variables static android-activity

我有一个GLRendering类,它有一个像这样的变量:

public class MyGLRenderer implements GLSurfaceView.Renderer{

int width;

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {

//I know these values are being set here correctly here to the devices width and height
//Confirmed using Logging

this.width = width;
this.height = height;


}


}

在我的Activity类中,我创建了一个GLSurfaceView类的实例,并尝试通过对象获取宽度值,如下所示:

public class MainActivity extends Activity {

private GLSurfaceView myView;
MyGLRenderer render;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Request full screen

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

    myView = new MyGLSurfaceView(this);
    render = new MyGLRenderer(myView);

    setContentView(myView);
}

我的Activity类中有一个内部类,它来自这个类的onTouchEvent()方法,我需要访问这个'width'变量,如下所示:

class MyGLSurfaceView extends GLSurfaceView {

    @Override
    public boolean onTouchEvent(MotionEvent event) {

Log.v("Testing","Value of width is: "+render.width)

当我从onTouchEvent()方法中注销值时,它返回0.为什么?我知道它不是0,实际上是设备屏幕的宽度。

如果我将MyGLSurfaceView类中'width'变量的声明更改为 static ,那么它工作正常,但我在Activity类中创建MyGLSurfaceView类实例的原因是因为我不想使用静态。我想在不使用静态的情况下访问它。

我也尝试过使用getter方法,得到相同的结果。

有人可以帮助我了解这种行为以及如何“绕过它”吗?感谢

1 个答案:

答案 0 :(得分:1)

从评论中移出:

访问width属性时,只有两种可能性为零。 1.正如我之前在评论中所写:你正在访问一个错误的实例或2.该属性确实为零。因此,在代码中添加一些日志记录。我会记录渲染器类的构造以及对width属性的任何更改。这应该可以帮助您找到问题所在。您可以向渲染器添加并记录唯一的UUID,因此您始终可以知道日志条目来自哪个实例。