最近学习游戏开发,简单的一个小游戏,首先是欢迎界面,然后是选择界面,在同一个Activity中,怎么由当前初始的View切换到自己想要的View呢?不是XML文件,自己编写View,贴图之类的。感觉用多个Activity有点费事,一个activity对应一个View有点笨啊,对参数的传递肯定有麻烦。
请牛人指教,提供个思路啊

解决方案 »

  1.   

    View view =new XXXView(Context);
    setContentView(view);
      

  2.   


    这是需要加载的XML文件吧?
      

  3.   


    这是需要加载的XML文件吧?
      

  4.   


    我不是在activity类中切换界面,我是想从当前的View中,响应 onTouchEvent()以后,直接切换到一个新的View。能否提供个思路啊,新手,多指教
      

  5.   

    onTouchEvent()以后setContentView(view);
      

  6.   

    自己试探着,把几个要加载的View成虚类,在Activity中再实现空方法,空方法里就是 
    gameView=new GameView(this){
             public void onNextView() {
             setContentView(sG);//借助Activity实现
             Log.d("Main","main");
             }
            };可以切换到新的View中。不知道各位有更合理的方法么?
      

  7.   


    我override的是View的,所以在里边不可以用setContentView
      

  8.   

    当前的View中,响应 onTouchEvent()以后的焦点  会传递给activityactivity可以判断是哪个View传递过来的焦点然后在activity里切换页面切换页面是activity的事不要 放在View做 
      

  9.   

    view1.setVisibility(View.GONE);
    view2.setVisibility(View.VISIBLE);
    view1和view2全部都是在一个xml里面配置的  通过设置显示与隐藏就能达到切换的效果
      

  10.   

    直接在onTouch中点击后,修改canvas的内容不就好了吗
      

  11.   

    自定义的View一般都传一个Activity进去,在View里面就可以activity.setContentView()了
      

  12.   

    这个要用到java开发语言的多态例如:public void onDraw(canvas c)
    {
                 switch(GameState)
                {
                 case:DrawLogo(c);break;
                 case:DrawMenu(c);break;
                }}public void DrawLogo(canvas c){}public void DrawMenu(canvas c){}用android开发游戏的话  用一个View就可以解决  只是要在View定多个状态  每个状态可以控制一个界面这里我沿用的j2me的游戏开发经验希望对你有帮助
      

  13.   

    实例化Intent(this,目的Activity类.class);
    再调用activity.setContentView(刚才实例化的Intent对象)如果有返回值的话可以下载我这个例子参考。
    http://download.csdn.net/download/ikaros_android/4054046
      

  14.   


    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;public class HandleMessage extends Activity implement Runnable{
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.loading);
            
            Thread thread = new Thread(this);
            thread.start()
        }
        
        private Handler mHandler = new Handler(){
            public void handleMessage(Message msg){
                //main.xml is your main ui
                setContentView(R.layout.main);
            }
        }    public void run(){
            initizlize();
            mHandler.sendEmptyMessage(0);
        }
        
        private void initizlize(){
            //init ............ 
        }
    }
    res/layout/loading.xml<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView android:id="@+id/loading"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Welcom..."
    />
    </LinearLayout>
      

  15.   


    是一个Activity中有多个自定义的View,我要根据当前View的操作,切换到下一个View
    不是你理解的那样子
      

  16.   


    思路不错,不太熟悉Java,从C转过来的
      

  17.   

    View.setVisibility()设置显示隐藏不行吗
      

  18.   

    不太明白楼主要的效果。
    不过可以看下calculator源码下的PanelSwitcher类,
    也许可以帮助到你
      

  19.   

    可以把当前的View给隐藏了,但是显示不出已经自定义好的下一个View啊,我是在当前View中操作的,在新的View类中onDraw都没有调用
      

  20.   

    在touch的view里面传递message到activity的handler,然后handler里面进行页面切换,也就是setcontentview
      

  21.   

    恩,对头,这样子处理不错,我修改过来了。
    利用Handler处理更合理一些
      

  22.   

    View view =new XXXView(Context);
    setContentView(view);
      

  23.   

    自定义的View一般都传一个Activity进去,在View里面就可以activity.setContentView()了
      

  24.   

    新来报到signature--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    http://www.hotsalesportshoes.com/
      

  25.   


    public class MyActivity extends Activity {
    WelcomeView welcomeView;//欢迎动画界面的引用
    GameView gameView;//游戏界面的引用
    AboutView aboutView;//关于界面
    HelpView helpView;//帮助界面
    Handler myHandler = new Handler(){//用来更新UI线程中的控件
            public void handleMessage(Message msg) {
             if(msg.what == 1){//欢迎界面发送的消息
             if(welcomeView != null){
             welcomeView = null;
             }
             initGameView();
             MyActivity.this.setContentView(gameView);
             }else if(msg.what == 2){//游戏胜利或者失败时点击屏幕
             if(gameView != null){
             gameView = null;
             }
             initWelcomeView();//初始化欢迎界面
             MyActivity.this.setContentView(welcomeView);//切换到欢迎界面
             }else if(msg.what == 3){
             initAboutView();
             MyActivity.this.setContentView(aboutView);//切换到关于界面
             }else if(msg.what == 4){
             initHelpView();
             MyActivity.this.setContentView(helpView);//切换到帮助界面
             }
            }
    };
    自定义的View
    public class AboutView extends SurfaceView implements SurfaceHolder.Callback{
    KLSDActivity activity;//activity的引用
    Bitmap aboutBitmap ;
    SurfaceHolder surfaceHolder;//surfaceHolder的引用
    public AboutView(MyActivity activity) {
    super(activity);
    this.activity = activity;
    surfaceHolder = this.getHolder();
    getHolder().addCallback(this);//添加Callback接口的实现
    // aboutBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.about);
    }
      public boolean onTouchEvent(MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN){
    double x = event.getX();
    double y = event.getY();
    if(x>230 && x<310 && y>310 && y<450){//点击确定按钮
    activity.myHandler.sendEmptyMessage(2);
    }
    }
    return super.onTouchEvent(event);
    }
    这是我参考了好几种写法后,觉得比较合适的。
    一个Activity,包含了多个view,可以直接从当前的view直接切换到自己想要的下一个view,也是变相的通过acticty来实现的。
      

  26.   

    onTouchEvent()以后setContentView(view);
      

  27.   


    其实他是想说ontouch写在Activity里面,直接在activity里面处理~~如果你不需要监控游戏状态的话,根本不需要handler,不过看这段代码貌似只是根据菜单跳转而已。
      

  28.   

    哈哈!自定义的View的话,也可以使用view的隐藏和显示属性的!
    不过切换的view过多,实现起来比较麻烦!
    如果是游戏的话,通过游戏动画来实现!技术要求比较高!
      

  29.   

    在AndroidManifest.xml里面注册一个
    <activity android:name=".EditActivity"/>
    代码
    Intent it = new Intent(".EditActivity");startActivity(it);// 酱紫你就可以切换了
      

  30.   

    package zhao.random;import android.app.Activity;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;public class RandomActivity extends Activity {
        
        private Button btn ;
        String random = null;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            btn = (Button) this.findViewById(R.id.Random); 
            btn.setText("Let's Rool it!");
            btn.setOnClickListener(new ButtonListener());
            //将监听器绑定在按钮上
        }
       
       //设置监听器 
        class ButtonListener implements OnClickListener, android.view.View.OnClickListener{   
        public void onClick(View v) {
        Intent intent = new Intent();
        intent.setClass(RandomActivity.this,showActivity.class);
        //从哪儿到哪儿从RandomActivity到showActivity
        // intent.getExtras("random",random);
        RandomActivity.this.startActivity(intent);
    }public void onClick(DialogInterface dialog, int which) {
    }}
    }
    http://blog.sina.com.cn/s/blog_6a528c550100zhhk.html
      

  31.   


    不是这个意思,真是这种情况的话,我也不至于在这边发文啊
    是从View切换到View,不是在activity中直接切换
      

  32.   

    书上看到一个示例,在Activity中添加一个handler,根据handleMessage(Message msg)msg的值来setContentview(自定义的View)
      

  33.   

    自定一个抽象的BaseControl,每个BaseControl及inflate的一个xml,BaseControl继承广播
      

  34.   

    在touch的view里面传递message到activity的handler,然后handler里面进行页面切换,也就是setcontentview
      

  35.   

    你在主的Activity里面用个
    switch(iFlag)
    {
    case 1:
    MyActivity.this.setContentView(myView1);
    break;
    case 2:
    MyActivity.this.setContentView(myView2);
    break;
    }
    你extern的View类里,必须在destruct函数里清空所有的非法内存资源
    View里需要切换界面的时候,只要给MainActivity通下信就行了,会自动切换必调用你的析构函数
    我当初开发游戏就是这样做的
      

  36.   

    View view =new XXXView(Context);
    setContentView(view);
      

  37.   

    楼主你这样做会遇到内存溢出问题吗,你每次切换的时候都要初始化一次下个view这样,你怎么把看不见的view回收呢
      

  38.   

    这个是正解,已经使用中,另外发现一点,能使用.setContentView的只有 activity的主线程,自己建的线程或者其他View都只能用例子那样发送消息,如果在其他线程调用 setContentView编译不报错的,但是运行会报错,好在有完整的错误提示,不然死都不知道怎么死的,不过这样说,那么处理消息的就是 activity的主线程哦,消息处理方法里小心别加阻塞的活动,不然假死
      

  39.   

                  不要使用setContentView(R.xxx)来实例View
    用下面的
                    LayoutInflater inflater = getLayoutInflater();//LayoutInflater是把XML转变成View对象的东西
    View InputView= inflater.inflate(R.layout.activity_touch, null);
                      setContentView(InputView);
    既然我受教了就完善这问题吧
    有对象就好搞了
      

  40.   

    你游戏里写好触屏事件的吧?
    直接把游戏视图加载到Activity,你在Activity做一个欢迎画面或logo,然后就跳转到游戏了,和Activity没联系了
      

  41.   

    现在大多数应用都用到这一技术,其实这也很简单,用一个Gallery 就可以了,在当前Activity中加载这几张图片,然后用ViewFlipper来让他们左右动画起来!   希望对你有帮助!
      

  42.   

    很多游戏、游戏引擎就一个view,根据游戏逻辑绘制不同的画面就行了- -
      

  43.   

    fragment应该是你想要的。去google一下吧
      

  44.   

    activitygroup 可以动态切换内部布局,包括控件,不过 还是有xml  也可以代码实现
      

  45.   


    我不是在activity类中切换界面,我是想从当前的View中,响应 onTouchEvent()以后,直接切换到一个新的View。能否提供个思路啊,新手,多指教这种方法就是啊!