この問題を解決するためにハンドラーを使用する必要はないと思いますが、クラスの編成方法を調整する必要があるかもしれません。
問題を解決する可能性のある組織構造の例を次に示します。
アクティビティクラス
public class MainActivity extends Activity {
private int modelNumber = 0;
private ArrayList<Model> models = new ArrayList<Model>();
private YourRendererClass renderer;
@Override
public void onCreate(Bundle savedInstanceState) {
...
// Setup GLSurfaceView
GLSurfaceView surface = new GLSurfaceView(this);
setContentView(surface);
renderer = new YourRendererClass();
surface.setRenderer(renderer);
// Set up models
models.add(new Model(x, y, size etc..));
models.add(new Model(x, y, size etc..));
models.add(new Model(x, y, size etc..));
etc.
// Display first model
renderer.setCurrentModel(models.get(modelNumber));
...
}
// Called by the button press:
// Use android:onClick="onClick"
// in your layout xml file within button
public void onClick(View view){
// Make it loop round
modelNumber++;
if(modelNumber>=models.size()){
modelNumber=0;
}
// Display current model
renderer.setCurrentModel(models.get(modelNumber));
}
}
レンダラークラス
public class YourRendererClass implements Renderer {
private Model currentModel;
@Override
public void onDrawFrame(GL10 gl) {
// ** Your existing set-up code **//
// Draw model
if (currentModel!=null){
currentModel.draw(gl);
}
}
public void setCurrentModel(Model model){
currentModel = model;
}
}
モデルクラス
public class Model {
// Holds model information
private int size;
private int x;
private int y;
// etc...
public model(int x, int y, int size etc...){
this.x=x;
this.y=y;
this.size=size;
// etc....
}
public void draw(GL10 gl) {
// ** Draw model based on model information fields above **
}
}
上記のコードは、描画コードにアクセスできないためテストされていませんが、正しく実装されていれば構造は機能するはずです。私はそれを機能させるためにあなた自身のコードをどこに挿入しなければならないかを明確にしようとしました。特に、さまざまなモデルのそれぞれを定義するものがわからなかったため、それらを定義するためにModelクラス内に十分なローカル変数を含める必要があります。
私の答えがお役に立てば幸いです。ご不明な点がありましたらお知らせください。
ティム