【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,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
算法 Java 定位技术
分享104个益智休闲安卓游戏源码,总有一款适合你
分享104个益智休闲安卓游戏源码,总有一款适合你
149 1
|
7天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
9 0
|
7天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
8 0
|
21天前
|
XML Java Android开发
Android每点击一次按钮就添加一条数据
Android每点击一次按钮就添加一条数据
22 1
|
1月前
|
移动开发 JavaScript Android开发
Android与Html5交互
Android与Html5交互
|
1月前
|
存储 Android开发 C++
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
31 3
|
2月前
|
JavaScript Java 数据安全/隐私保护
安卓逆向 -- POST数据解密
安卓逆向 -- POST数据解密
25 2
|
2月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
25 0
|
3月前
|
编解码 移动开发 人工智能
android游戏源码
android游戏源码
77 0
|
3月前
|
编解码 测试技术 开发工具
如何实现Android视音频数据对接到GB28181平台(SmartGBD)
如何实现Android视音频数据对接到GB28181平台(SmartGBD)