0

我有一个 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() 方法,我需要访问这个“宽度”变量,如下所示:

class MyGLSurfaceView extends GLSurfaceView {

    @Override
    public boolean onTouchEvent(MotionEvent event) {

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

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

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

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

请有人可以帮助我理解这种行为以及如何解决它?谢谢

4

1 回答 1

1

移自评论:

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

于 2013-05-07T19:58:07.097 回答