全部页面都是View,View内又可以有子View,它们不断切换能造成绝大多数APP的效果。
最大的好处就是只有一个Activity,管理起来容易。
如果认为内存不够,可以适当销毁一些View,手工管理内存(其实也很简单)。
MainActivity.java
package com.activity;
import com.subview.SubFrameView;
import com.view.FrameView;
import com.view.GuideView;
import com.view.MainView;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.animation.AnimationUtils;
public class MainActivity extends Activity {
FrameView currentView;
public GuideView guideView;
public MainView mainView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameView.act=this;
SubFrameView.act=this;
setView(guideView=new GuideView());
}
/**
* 设置页面
* @param view
*/
public void setView(FrameView view){
View v=view.getView();
setContentView(v);
view.reInit();
currentView=view;
}
/**
* 设置页面,动画
* @param view
*/
public void setView(FrameView view, int outAnim, int inAnim) {
if (currentView == null) {
} else {
View outView = currentView.getView();
View inView = view.getView();
outView.startAnimation(AnimationUtils.loadAnimation(this, outAnim));
inView.startAnimation(AnimationUtils.loadAnimation(this, inAnim));
}
setView(view);
}
public boolean onKeyDown(int kc,KeyEvent ev){
if (kc == KeyEvent.KEYCODE_BACK && ev.getAction() == KeyEvent.ACTION_DOWN) {
currentView.back();
}
return false;
}
protected void onResume(){
super.onResume();
currentView.onResume();
}
protected void onPause(){
super.onPause();
currentView.onPause();
}
}
package com.view;
import com.activity.MainActivity;
import com.subview.SubFrameView;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
public abstract class FrameView {
View my;
public static MainActivity act;
public View getView(){
if(my==null){
createView();
}
return my;
}
//在此方法中初始化my
protected abstract void createView();
//销毁
public void destoryView(){
my=null;
}
//back键返回
public abstract void back();
//每次setView()时会自动调用,有需要就重写
public void reInit(){
}
//有需要就重写
public void onResume(){
}
public void onPause(){
}
//sub view
ViewGroup viewGroup;//先设置viewGroup(子view的容器),再使用
SubFrameView<? extends FrameView> currentSubView;
//设置子view
public void setSubView(SubFrameView<? extends FrameView> subview){
viewGroup.removeAllViews();
View view=subview.getView();
viewGroup.addView(view);
subview.reInit();
currentSubView=subview;
}
//设置子view,动画
public void setSubView(SubFrameView<? extends FrameView> subview, int outAnim, int inAnim){
if (currentSubView == null) {
} else {
View outView = currentSubView.getView();
View inView = subview.getView();
outView.startAnimation(AnimationUtils.loadAnimation(act, outAnim));
inView.startAnimation(AnimationUtils.loadAnimation(act, inAnim));
}
setSubView(subview);
}
}
SubFrameView.java
package com.subview;
import android.view.View;
import com.activity.MainActivity;
import com.view.FrameView;
public abstract class SubFrameView<T extends FrameView> {
View my;
T parentView;//父view
public static MainActivity act;
public SubFrameView(T parentView){
this.parentView=parentView;
}
public View getView(){
if(my==null){
createView();
}
return my;
}
protected abstract void createView();
public void destoryView(){
my=null;
}
public void reInit(){
}
}
详细demo代码: