不少童鞋說個人代碼運行後,點擊home或者back後會程序異常,若是你也這樣遇到過,那麼你確定沒有仔細讀完Himi的博文,第十九篇Himi專門寫了關於這些錯誤的緣由和解決方法,這裏我在博客都補充說明下,省的童鞋們總疑惑這一塊;請點擊下面聯繫進入閱讀:css
【Android遊戲開發十九】(必看篇)SurfaceView運行機制詳解—剖析Back與Home按鍵及切入後臺等異常處理!html
今天講下在Surfaceview中如何實現兩個或者多個Activity之間的切換與數據交互,爲了更形象一些我作了一個遊戲登陸界面的demo,其中對於輸入界面的佈局這些我也是隨意寫了下,主要是實現功能並無花時間去美化,因此你們能夠本身去xml或者代碼中去改變佈局,每一個小組件的寬高等。好了,下面先上圖(本人超愛~哆啦A夢,因此少不了用哆啦A夢的圖了,娃哈哈)java
因爲代碼中一共寫了三個類,這裏再也不所有貼出來,不方便;你們能夠在文章的末尾去下載源碼;android
兩個activity之間切換我歸納的分爲兩步:app
1. 代碼實現切換操做。2.配置中聲明另一個acitivity!ide
咱們先看第一步:這裏是觸屏處理中的一段代碼:函數
public boolean onTouchEvent(MotionEvent event) { float pointx = event.getX(); float pointy = event.getY(); if (pointx > bp_x + 14 && pointx < bp_x + 14 + 117) { if (pointy > bp_y + 43 && pointy < bp_y + 43 + 15) { // 賬號 Intent i = new Intent();// 獲得一個意圖的實例 i.putExtra("count", 1);// 寫出數據 i.putExtra("himi", str_zh); i.setClass(MainActivity.instance, Register.class);// 設置當前activity以及將要操做的類 MainActivity.instance.startActivity(i);// 用當前activity來啓動另一個activity } } }
顯示定義一個intent 對象,Intent 這個類的機制是協助交互的,詳細的說明這裏很少講;佈局
Intent 中的putExtra()函數是起到兩個activity之間交互交互的,這個方法相似 hashtable 或者hashmap中的put是同樣的,第一個參數是key(索引) ,後一個參數volue(值),根據key咱們能夠獲得對應的volue了。那麼後面我也附上接受的處理。this
Intent 中的setClass()函數也是傳入兩個參數,第一個是傳入當前實例的activity對象,後面一個參數指須要打開的activity這個類!而後咱們就能夠利用當前activity對象來啓動另一個activity了。而後咱們看下在另一個activity是如何建立而且怎麼接受數據的。spa
/** * */ package com.himi; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; /** * @author Himi * */ public class Register extends Activity { private Button button_ok; private EditText et; private TextView tv; private LinearLayout ly; private Register rs; private byte count; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); rs = this; ly = new LinearLayout(this); button_ok = new Button(this); button_ok.setWidth(100); button_ok.setText("肯定"); button_ok.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (count == 1) { MySurfaceView.str_zh = et.getText().toString(); } else if (count == 2) { MySurfaceView.str_pass = et.getText().toString(); } rs.finish(); } }); Intent intent = this.getIntent(); count = (byte) intent.getIntExtra("count", 0); String temp_str = ""; String temp_str2 = ""; et = new EditText(this); tv = new TextView(this); if (count != 3) { temp_str = intent.getStringExtra("himi"); if (count == 1) { rs.setTitle("請輸入賬號!"); } else { rs.setTitle("請輸入密碼!"); } ly.addView(tv); ly.addView(et); ly.addView(button_ok); if (temp_str != null) { et.setText(temp_str); } } else { temp_str = intent.getStringExtra("himi_zh"); temp_str2 = intent.getStringExtra("himi_pass"); rs.setTitle("您輸入的信息:"); tv.setText("賬號:" + temp_str + "/n" + "密碼" + temp_str2); ly.addView(tv); ly.addView(button_ok); if (temp_str != null) { et.setText(temp_str); } } setContentView(ly); } }
以上代碼能夠看出,新建一個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!
<activity android:name="com.himi.Register" android:theme="@android:style/Theme.Dialog" android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation"> </activity> <!--我是註釋--> <activity android:name="com.himi.Register"></activity>
<!---->此符號是註釋
這裏咱們有兩個聲明方法,用註釋隔開了,上面一個聲明中還設定了一些屬性,theme顯示的形式,等等,其實最簡單的聲明也是能夠的就像註釋下面那一句聲明就足以起到做用了。
當有新的activity的時候必定要去聲明;千萬不要忘記這一步。
備註:配置中有一屬性 -> android:screenOrientation 這是設置橫屏,因此豎屏中點擊會有問題,若是想豎屏顯示正常那麼能夠自行刪除xml中的 android:screenOrientation="landscape" 就能夠了。
(推薦你們訂閱本博客,由於咱的更新速度但是很快的~娃哈哈)
源碼下載地址: http://www.himigame.com/android-game/301.html