次のような変数を持つ 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' 変数の宣言をstaticに変更すると正常に動作しますが、Activity クラスで MyGLSurfaceView クラスのインスタンスを作成する理由は、静的を使用したくないためです。static を使わずにアクセスしたい。
getter メソッドも試してみましたが、同じ結果が得られました。
誰かがこの動作とそれを回避する方法を理解するのを手伝ってくれませんか? ありがとう