我有有像這樣的變量的GLRendering類變量:無法訪問在GLSurfaceview類中聲明自Activity類沒有靜態
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;
}
}
在我的活動類,我創造我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);
}
我有一個內部類在我的活動類,它是從這個類的的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'變量的聲明更改爲static那麼它工作正常,但我在我的Activity類中創建MyGLSurfaceView類實例的原因是因爲我沒有想要使用靜態。我想訪問它,而不使用靜態。
我也試過使用getter方法,並且得到相同的結果。
請有人能幫助我理解這種行爲,以及如何得到它嗎?由於
看起來像onSurfaceChanged永遠不會被調用,或調用寬度等於0.你確定onSurfaceCHanged被調用? – 2013-05-07 17:57:33
嗨@ZouZou如上所述,如果我聲明變量爲靜態,它工作正常。另外,我在我的onSurfaceChanged()方法中加載了所有的資源(圖形,聲音等),遊戲運行良好,所以它完全被調用並正在運行。如果沒有Static,它只會返回寬度變量的初始值。如果我將它設置爲100像int width = 100;那麼它總是會返回100;但如果我直接從onSurfaceChanged方法記錄它,它將註銷正確的值。 :-) – Zippy 2013-05-07 18:02:33
你在模擬器或真實設備上運行你的應用程序嗎? – 2013-05-07 18:08:31