一个Activity中的多个View怎么切换啊?
最近学习游戏开发,简单的一个小游戏,首先是欢迎界面,然后是选择界面,在同一个Activity中,怎么由当前初始的View切换到自己想要的View呢?不是XML文件,自己编写View,贴图之类的。感觉用多个Activity有点费事,一个activity对应一个View有点笨啊,对参数的传递肯定有麻烦。
请牛人指教,提供个思路啊 --------------------编程问答-------------------- Inflater呗 --------------------编程问答-------------------- View view =new XXXView(Context);
setContentView(view); --------------------编程问答--------------------
这是需要加载的XML文件吧? --------------------编程问答--------------------
这是需要加载的XML文件吧? --------------------编程问答--------------------
我不是在activity类中切换界面,我是想从当前的View中,响应 onTouchEvent()以后,直接切换到一个新的View。能否提供个思路啊,新手,多指教 --------------------编程问答-------------------- onTouchEvent()以后setContentView(view); --------------------编程问答-------------------- 自己试探着,把几个要加载的View成虚类,在Activity中再实现空方法,空方法里就是
gameView=new GameView(this){
public void onNextView() {
setContentView(sG);//借助Activity实现
Log.d("Main","main");
}
};
可以切换到新的View中。
不知道各位有更合理的方法么? --------------------编程问答--------------------
我override的是View的,所以在里边不可以用setContentView。。。 --------------------编程问答-------------------- 当前的View中,响应 onTouchEvent()以后的焦点 会传递给activity
activity可以判断是哪个View传递过来的焦点
然后在activity里切换页面
切换页面是activity的事不要 放在View做 --------------------编程问答-------------------- view1.setVisibility(View.GONE);
view2.setVisibility(View.VISIBLE);
view1和view2全部都是在一个xml里面配置的 通过设置显示与隐藏就能达到切换的效果 --------------------编程问答--------------------
赞同 --------------------编程问答-------------------- 直接在onTouch中点击后,修改canvas的内容不就好了吗 --------------------编程问答-------------------- 自定义的View一般都传一个Activity进去,在View里面就可以activity.setContentView()了 --------------------编程问答-------------------- 这个要用到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的游戏开发经验
希望对你有帮助
--------------------编程问答-------------------- 实例化Intent(this,目的Activity类.class);
再调用activity.setContentView(刚才实例化的Intent对象)
如果有返回值的话可以下载我这个例子参考。
http://download.csdn.net/download/ikaros_android/4054046 --------------------编程问答--------------------
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>
--------------------编程问答-------------------- 用intent不行吗? --------------------编程问答--------------------
+1 --------------------编程问答--------------------
是一个Activity中有多个自定义的View,我要根据当前View的操作,切换到下一个View
不是你理解的那样子 --------------------编程问答--------------------
思路不错,不太熟悉Java,从C转过来的 --------------------编程问答-------------------- tablehost
或者使用Fragement --------------------编程问答-------------------- --------------------编程问答-------------------- View.setVisibility()设置显示隐藏不行吗 --------------------编程问答-------------------- 不太明白楼主要的效果。
不过可以看下calculator源码下的PanelSwitcher类,
也许可以帮助到你 --------------------编程问答--------------------
可以把当前的View给隐藏了,但是显示不出已经自定义好的下一个View啊,我是在当前View中操作的,在新的View类中onDraw都没有调用 --------------------编程问答-------------------- 在touch的view里面传递message到activity的handler,然后handler里面进行页面切换,也就是setcontentview --------------------编程问答--------------------
恩,对头,这样子处理不错,我修改过来了。
利用Handler处理更合理一些 --------------------编程问答-------------------- View view =new XXXView(Context);
setContentView(view); --------------------编程问答-------------------- --------------------编程问答-------------------- 自定义的View一般都传一个Activity进去,在View里面就可以activity.setContentView()了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 新来报到
signature--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://www.hotsalesportshoes.com/
--------------------编程问答-------------------- FrameLayout --------------------编程问答-------------------- --------------------编程问答--------------------
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 Su易做图ceView implements Su易做图ceHolder.Callback{
KLSDActivity activity;//activity的引用
Bitmap aboutBitmap ;
Su易做图ceHolder su易做图ceHolder;//su易做图ceHolder的引用
public AboutView(MyActivity activity) {
super(activity);
this.activity = activity;
su易做图ceHolder = 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来实现的。
--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 新手报到,多多指导 --------------------编程问答-------------------- onTouchEvent()以后setContentView(view); --------------------编程问答--------------------
服了 --------------------编程问答-------------------- 俺进来学习学习, 坐等高人 --------------------编程问答-------------------- 这个纯粹是代码编写技巧的问题,仁者见仁 --------------------编程问答--------------------
其实他是想说ontouch写在Activity里面,直接在activity里面处理~~如果你不需要监控游戏状态的话,根本不需要handler,不过看这段代码貌似只是根据菜单跳转而已。
--------------------编程问答-------------------- 希望能用! --------------------编程问答-------------------- 关注下! --------------------编程问答-------------------- 关注下! --------------------编程问答-------------------- 哈哈!自定义的View的话,也可以使用view的隐藏和显示属性的!
不过切换的view过多,实现起来比较麻烦!
如果是游戏的话,通过游戏动画来实现!技术要求比较高! --------------------编程问答-------------------- 来看看
呵呵 --------------------编程问答-------------------- 我先眯一会.......... --------------------编程问答-------------------- 在AndroidManifest.xml里面注册一个
<activity android:name=".EditActivity"/>
代码
Intent it = new Intent(".EditActivity");
startActivity(it);// 酱紫你就可以切换了 --------------------编程问答-------------------- package zhao.random;
import android.app.Activity;
import android.content.DialogInte易做图ce;
import android.content.DialogInte易做图ce.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(DialogInte易做图ce dialog, int which) {
}
}
}
http://blog.sina.com.cn/s/blog_6a528c550100zhhk.html --------------------编程问答--------------------
不是这个意思,真是这种情况的话,我也不至于在这边发文啊
是从View切换到View,不是在activity中直接切换 --------------------编程问答-------------------- --------------------编程问答-------------------- 书上看到一个示例,在Activity中添加一个handler,根据handleMessage(Message msg)msg的值来setContentview(自定义的View) --------------------编程问答-------------------- 自定一个抽象的BaseControl,每个BaseControl及inflate的一个xml,BaseControl继承广播 --------------------编程问答-------------------- --------------------编程问答-------------------- 在touch的view里面传递message到activity的handler,然后handler里面进行页面切换,也就是setcontentview --------------------编程问答-------------------- 你在主的Activity里面用个
switch(iFlag)
{
case 1:
MyActivity.this.setContentView(myView1);
break;
case 2:
MyActivity.this.setContentView(myView2);
break;
}
你extern的View类里,必须在destruct函数里清空所有的非法内存资源
View里需要切换界面的时候,只要给MainActivity通下信就行了,会自动切换必调用你的析构函数
我当初开发游戏就是这样做的 --------------------编程问答-------------------- View view =new XXXView(Context);
setContentView(view); --------------------编程问答-------------------- --------------------编程问答--------------------
受教了 --------------------编程问答-------------------- 请问楼主,选关界面是怎么做的? --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主你这样做会遇到内存溢出问题吗,你每次切换的时候都要初始化一次下个view这样,你怎么把看不见的view回收呢 --------------------编程问答-------------------- --------------------编程问答-------------------- 给跪!!!!!!!!!!!!!!!! --------------------编程问答-------------------- 这个是正解,已经使用中,另外发现一点,能使用.setContentView的只有 activity的主线程,自己建的线程或者其他View都只能用例子那样发送消息,如果在其他线程调用 setContentView编译不报错的,但是运行会报错,好在有完整的错误提示,不然死都不知道怎么死的,不过这样说,那么处理消息的就是 activity的主线程哦,消息处理方法里小心别加阻塞的活动,不然假死 --------------------编程问答--------------------
不要使用setContentView(R.xxx)来实例View
用下面的
LayoutInflater inflater = getLayoutInflater();//LayoutInflater是把XML转变成View对象的东西
View InputView= inflater.inflate(R.layout.activity_touch, null);
setContentView(InputView);
既然我受教了就完善这问题吧
有对象就好搞了 --------------------编程问答-------------------- 你游戏里写好触屏事件的吧?
直接把游戏视图加载到Activity,你在Activity做一个欢迎画面或logo,然后就跳转到游戏了,和Activity没联系了 --------------------编程问答-------------------- 现在大多数应用都用到这一技术,其实这也很简单,用一个Gallery 就可以了,在当前Activity中加载这几张图片,然后用ViewFlipper来让他们左右动画起来! 希望对你有帮助!
--------------------编程问答-------------------- 很多游戏、游戏引擎就一个view,根据游戏逻辑绘制不同的画面就行了- - --------------------编程问答-------------------- 最科学的做法是14楼提供的那个。 --------------------编程问答-------------------- fragment应该是你想要的。去google一下吧 --------------------编程问答-------------------- 初识安卓。。。帮顶 --------------------编程问答-------------------- activitygroup 可以动态切换内部布局,包括控件,不过 还是有xml 也可以代码实现 --------------------编程问答-------------------- 学习了 --------------------编程问答--------------------
我不是在activity类中切换界面,我是想从当前的View中,响应 onTouchEvent()以后,直接切换到一个新的View。能否提供个思路啊,新手,多指教
这种方法就是啊! --------------------编程问答-------------------- 可以用fragment试试
补充:移动开发 , Android