事象の水平線

個人的ブックマーク代わりなメモ書きブログ。 地球は丸いよ。↓このへん。

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop
Activityに拠らない画面切り替えの方法 2種類
両方とも見えているViewを切り替える。という考え方。
ソースのimportは省略。レイアウトにxmlは使わない派です。

その1:setContentView()を使ってViewを切り替える方法
public class MainActivity extends Activity implements android.view.View.OnClickListener {	

private LinearLayout _firstLayout;
private LinearLayout _secondLayout;
private Button _firstButton;
private Button _secondButton;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Context context = getApplicationContext();

_firstLayout = new LinearLayout(context);
_firstButton = new Button(context);
_firstLayout.addView(_firstButton);
_firstLayout.setBackgroundColor(Color.CYAN);
_firstButton.setText("1st button");
_firstButton.setOnClickListener(this);

_secondLayout = new LinearLayout(context);
_secondButton = new Button(context);
_secondLayout.addView(_secondButton);
_secondLayout.setBackgroundColor(Color.GREEN);
_secondButton.setText("2nd button");
_secondButton.setOnClickListener(this);

setContentView(_firstLayout);

}

@Override
public void onClick(View v) {
if(v == _firstButton){
setContentView(_secondLayout);
}else if(v == _secondButton){
setContentView(_firstLayout);
}
}
}


その2:FrameLayoutにViewを重ねておいて、重ね順を変えることで、手前に見えているViewを切り替える方法
必要であればView.setVisibility(int visibility)も併用
public class MainActivity extends Activity implements android.view.View.OnClickListener {	

private FrameLayout _rootLayout;
private LinearLayout _firstLayout;
private LinearLayout _secondLayout;
private Button _firstButton;
private Button _secondButton;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Context context = getApplicationContext();
_rootLayout = new FrameLayout(context);

_firstLayout = new LinearLayout(context);
_firstButton = new Button(context);
_firstLayout.addView(_firstButton);
_firstLayout.setBackgroundColor(Color.CYAN);
_firstButton.setText("1st button");
_firstButton.setOnClickListener(this);

_secondLayout = new LinearLayout(context);
_secondButton = new Button(context);
_secondLayout.addView(_secondButton);
_secondLayout.setBackgroundColor(Color.GREEN);
_secondButton.setText("2nd button");
_secondButton.setOnClickListener(this);

_rootLayout.addView(_secondLayout);
_rootLayout.addView(_firstLayout);

setContentView(_rootLayout);

}

@Override
public void onClick(View v) {
if(v == _firstButton){
_secondLayout.bringToFront();
}else if(v == _secondButton){
_firstLayout.bringToFront();
}
}
}

Activityに拠らないメリットは切り替えが速い。
LifeCycleとかとかいろいろと面倒なことにならない。たぶん。
デメリット(?)はActivity切り替えのtransitionAnimationが勝手にはつかない。
View次第ではアプリ起動時に全部作るから、時間がかかる(?)メモリを食う(?)のかなぁ?

その1は発想がシンプルだけど、GLSurfaceViewを切り替えるviewに使うと、setContentView()のたびにGLcontextがnullになるらしく、画像読み込みが発生する。と思う。(理解してないだけかも)
その2は重ね順を変えているだけなので、その心配はない。と思う。

スポンサーサイト

PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。