【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,如需转载请自行联系原作者
目录
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1637 4
|
12月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
688 11
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2989 2
|
前端开发 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
1015 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
373 6
|
数据采集 Android开发 索引
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
801 0
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
|
数据采集 存储 传感器
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
496 0
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
|
数据采集 传感器 编解码
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
437 0
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
|
数据采集 Ubuntu Shell
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(二)
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(二)
512 0
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(二)
|
数据采集 传感器 编解码
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(一)
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(一))
428 0
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(一)