Как обрабатывать onPause / onResume для GLSurfaceView - PullRequest
0 голосов
/ 13 декабря 2011

Когда GlSurfaceView встраивается в макет, например,

  <FrameLayout
  android:id="@+id/framelay"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
     <com.nelsondev.myha3ogl.M3View
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"/>
  </FrameLayout> 

Затем, когда макет раздувается, он создается автоматически с помощью конструктора с подписью: GLSurfaceView (Context context, AttributeSet attrs) .Поэтому он не объявляется и не создается в буквальном смысле в классе Activity.

В документации Android говорится, что onPause / onResume класса Activity должен вызывать onPause / onResume для SurfaceView.Как мне это сделать?То есть, как Activity, которая раздула макет, может получить доступ к объекту GlSurfaceView для выполнения этих вызовов?

Редактировать: Это для Android 2.2

Спасибозаранее!

1 Ответ

2 голосов
/ 13 декабря 2011

В макете XML присвойте своему SurfaceView имя, добавив атрибут name:

<com.nelsondev.myha3ogl.M3View
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/my_surfaceView1"/>

Далее переопределите onPause и onResume в своей деятельности, найдите представление с помощью findViewById(R.id.my_surfaceView1); и затем вызовите onPauseи onResume для вашего SurfaceView:

@Override
public void onPause(){
    com.nelsondev.myha3ogl.M3View myView = (com.nelsondev.myha3ogl.M3View)findViewById(R.id.my_surfaceView1);

    myView.onPause();

    super.onPause();

}

Наконец, в вашей реализации представления поверхности переопределите onPause () / onResume () и поместите любой код, который вам нужно сделать, когда ваша деятельность приостановится / возобновится.Не забудьте также вызвать super.onPause () / super.onResume () в представлении поверхности


Редактировать: просто чтобы уточнить, вы можете использовать метод findViewById() для любого объекта ViewGroup, чтобы найти дочерние представления внутри этой группы:
MyActivity extends Activity{

    public void onCreate(Bundle bundle){

        FrameLayout myFrameLayout = (FrameLayout)getLayoutInflater().inflate(R.layout.graphics, null, false);
        TextView myView = (TextView)myFrameLayout.findViewById(R.id.textView1);

        if(myView!=null){
            myView.setText("about to be removed");
            myFrameLayout.removeView(myView);
        }

        setContentView(myFrameLayout);


    }
}

Или findViewById() также является методом в Activity, который найдет любое представление в макете, установленном с помощью setContentView();

MyActivity extends Activity{

    public void onCreate(Bundle bundle){
        setContentView(R.layout.graphics);
        // where the xml file in your question is called graphics.xml    
        com.nelsondev.myha3ogl.M3View myGLSurfaceView = (com.nelsondev.myha3ogl.M3View)findViewById(R.id.my_surfaceView1);
        FrameLayout myFrameLayout = (FrameLayout)findViewById(R.id.framelay);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...