gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:36:45 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com