java - 无法从 Activity 类访问 GLSurfaceview 类中声明的变量(没有静态)

标签 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() 方法访问此“宽度”变量,如下所示:

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 方法,得到了相同的结果。

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

最佳答案

移自评论:

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

关于java - 无法从 Activity 类访问 GLSurfaceview 类中声明的变量(没有静态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16425409/

相关文章:

Dialog "Don' t 再次询问的 Android M 权限问题”

perl - 未知指令 "perl_modules"

javascript - 变量不包含真实值。如何。为什么?

java - 从 Java 中的另一个类调用方法不起作用?

java - 如何使用 Kotlin 和 jackson ObjectMapper 从 json 中删除属性

android - 从 eclipse 到电话我得到 INSTALL_FAILED_INSUFFICIENT_STORAGE

android - 如何在Android应用程序中实现Xbox Controller ?

java - 如何知道 Java 套接字已死

java - org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 时出错

python - 从 cmd 行或 bash 脚本将参数传递给 python 脚本