我有一个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方法,得到相同的结果。
有人可以帮助我了解这种行为以及如何“绕过它”吗?感谢
答案 0 :(得分:1)
从评论中移出:
访问width属性时,只有两种可能性为零。 1.正如我之前在评论中所写:你正在访问一个错误的实例或2.该属性确实为零。因此,在代码中添加一些日志记录。我会记录渲染器类的构造以及对width属性的任何更改。这应该可以帮助您找到问题所在。您可以向渲染器添加并记录唯一的UUID,因此您始终可以知道日志条目来自哪个实例。