【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!

简介:

  今天讲下在Surfaceview中如何实现两个或者多个Activity之间的切换与数据交互,为了更形象一些我做了一个游戏登录界面的demo,其中对于输入界面的布局这些我也是随意写了下,主要是实现功能并没有花时间去美化,所以大家可以自己去xml或者代码中去改变布局,每个小组件的宽高等。好了,下面先上图(本人超爱~哆啦A梦,所以少不了用哆啦A梦的图了,娃哈哈)

 

 

 

由于代码中一共写了三个类,这里不再全部贴出来,不方便;大家可以在文章的末尾去下载源码;

    两个activity之间切换我概括的分为两步:

     1. 代码实现切换操作。2.配置中声明另外一个acitivity! 

    我们先看第一步:这里是触屏处理中的一段代码: 


  
  
  1. public boolean onTouchEvent(MotionEvent event) {  
  2.     float pointx = event.getX();  
  3.     float pointy = event.getY();  
  4.     if (pointx > bp_x + 14 && pointx < bp_x + 14 + 117) {  
  5.         if (pointy > bp_y + 43 && pointy < bp_y + 43 + 15) {  
  6.             // 帐号  
  7.             Intent i = new Intent();// 得到一个意图的实例  
  8.             i.putExtra("count", 1);// 写出数据  
  9.             i.putExtra("himi", str_zh);  
  10.             i.setClass(MainActivity.instance, Register.class);// 设置当前activity以及将要操作的类  
  11.             MainActivity.instance.startActivity(i);// 用当前activity来启动另外一个activity  
  12.         }  
  13.     }  

显示定义一个intent 对象,Intent 这个类的机制是协助交互的,详细的说明这里不多讲;

    Intent 中的putExtra()函数是起到两个activity之间交互交互的,这个方法类似 hashtable 或者hashmap中的put是一样的,第一个参数是key(索引) ,后一个参数volue(值),根据key我们可以得到对应的volue了。那么后面我也附上接受的处理。

    Intent 中的setClass()函数也是传入两个参数,第一个是传入当前实例的activity对象,后面一个参数指需要打开的activity这个类!然后我们就可以利用当前activity对象来启动另外一个activity了。然后我们看下在另外一个activity是如何创建并且怎么接受数据的。


  
  
  1. /**  
  2.  *   
  3.  */  
  4. package com.himi;  
  5. import android.app.Activity;  
  6. import android.content.Intent;  
  7. import android.os.Bundle;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.widget.Button;  
  11. import android.widget.EditText;  
  12. import android.widget.LinearLayout;  
  13. import android.widget.TextView;  
  14. /**  
  15.  * @author Himi  
  16.  *   
  17.  */  
  18. public class Register extends Activity {  
  19.     private Button button_ok;  
  20.     private EditText et;  
  21.     private TextView tv;  
  22.     private LinearLayout ly;  
  23.     private Register rs;  
  24.     private byte count;  
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         rs = this;  
  29.         ly = new LinearLayout(this);  
  30.         button_ok = new Button(this);  
  31.         button_ok.setWidth(100);  
  32.         button_ok.setText("确定");  
  33.         button_ok.setOnClickListener(new OnClickListener() {  
  34.             public void onClick(View v) {  
  35.                 if (count == 1) {  
  36.                     MySurfaceView.str_zh = et.getText().toString();  
  37.                 } else if (count == 2) {  
  38.                     MySurfaceView.str_pass = et.getText().toString();  
  39.                 }  
  40.                 rs.finish();  
  41.             }  
  42.         });  
  43.         Intent intent = this.getIntent();  
  44.         count = (byte) intent.getIntExtra("count", 0);  
  45.         String temp_str = "";  
  46.         String temp_str2 = "";  
  47.         et = new EditText(this);  
  48.         tv = new TextView(this);  
  49.         if (count != 3) {  
  50.             temp_str = intent.getStringExtra("himi");  
  51.             if (count == 1) {  
  52.                 rs.setTitle("请输入帐号!");  
  53.             } else {  
  54.                 rs.setTitle("请输入密码!");  
  55.             }  
  56.             ly.addView(tv);  
  57.             ly.addView(et);  
  58.             ly.addView(button_ok);  
  59.             if (temp_str != null) {  
  60.                 et.setText(temp_str);  
  61.             }  
  62.         } else {  
  63.             temp_str = intent.getStringExtra("himi_zh");  
  64.             temp_str2 = intent.getStringExtra("himi_pass");  
  65.             rs.setTitle("您输入的信息:");  
  66.             tv.setText("帐号:" + temp_str + "/n" + "密码" + temp_str2);  
  67.             ly.addView(tv);  
  68.             ly.addView(button_ok);  
  69.             if (temp_str != null) {  
  70.                 et.setText(temp_str);  
  71.             }  
  72.         }  
  73.         setContentView(ly);  
  74.     }  
  75. }  

    以上代码可以看出,新建一个activity其实只需要继承Activity以及重写onCreate()方法即可。当然创建的还需要一步很重要的步骤,那么在第二步中会详细说明,这里我们看下是如何接受之前的activity传来数据的、。 

Intent intent = this.getIntent();

count = (byte) intent.getIntExtra("count", 0);

    接受也是很简明易懂,创建一个Intent 意图对象,调用来去getIntExtra函数得到之前传来的数据,根据key!当然还有getStringExtra()等等函数都是类似,只是根据你传入的数据不同选择不同函数罢了。童鞋们应该注意的是getIntExtra中第二个参数是什么意思,其实就是一个对于找不到key相匹配的时候会默认return 0 ; 

     那么下面介绍第二步:在配置中声明

    当创建一个activity的时候我们必须去在AndroidMainFeset.xml中去生命我们创建的这个类是个Activity!下面附上xml中的code! 


  
  
  1. <activity android:name="com.himi.Register" android:theme="@android:style/Theme.Dialog" 
  2.             android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation"> 
  3.         </activity> 
  4.         <!--我是注释--> 
  5.         <activity android:name="com.himi.Register"></activity> 

 <!---->此符号是注释

    这里我们有两个声明方法,用注释隔开了,上面一个声明中还设定了一些属性,theme显示的形式,等等,其实最简单的声明也是可以的就像注释下面那一句声明就足以起到作用了。

    当有新的activity的时候一定要去声明;千万不要忘记这一步。

     备注:配置中有一属性 -> android:screenOrientation 这是设置横屏,所以竖屏中点击会有问题,如果想竖屏显示正常那么可以自行删除xml中的 android:screenOrientation="landscape" 就可以了。





本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/605735,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
505 4
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
184 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
5月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
136 6
|
5月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
50 3
|
5月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
42 0
|
8天前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
73 19
|
1月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
70 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
59 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
132 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程

热门文章

最新文章