編輯:關於Android編程
本文要實現的目的是:
有3個Activity: A,B,C,從A中可以進入B,B中可以進入C,並且B和C之間可能需要多次相互切換,因此不能使用普通的startActivity-finish方式,因為重新創建Activity比較耗時。當這個Activity內容比較多時,重復創建很大的影響了流暢性。(即實現類似於QQ上 選擇照片頁面-選擇相冊頁面,這兩個頁面可能多次相互切換,所以不能多次創建)
1.從B進入C或者從C進入B時,均使用startActivity的方式(不使用finish),並為intent添加參數FLAG_ACTIVITY_REORDER_TO_FRONT,即:
Intent intent = new Intent(B.this, C.class); intent.addFlags(Intent.FLAG_ACTIVITY__TO_FRONT); startActivity(intent);在這種情況下,如果C之前沒有創建則會被創建,如果已經創建了,則只會把C從Aciticy棧中搬到B的上面來,而不再重新創建。
2.在C中重寫onNewIntent方法,即:
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); }該方法中的參數intent即為從B到C時startActivity的intent,在第二次進入C時,可以在此方法中根據從B中傳過來的數據更新C的頁面。(第一次進入C時走onCreate,不會走onNewIntent)
3.在B中也重寫onNewIntent,和上述2相同。
4.在A和B中使用某個按鈕或返回鍵回到最開始的頁面A時,同樣使用startActivity的方式,並為intent添加參數FLAG_ACTIVITY_CLEAR_TOP,這樣B和C都會被關閉(finish)
Intent intent = new Intent(this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
6.最後一個問題,由於從B到C和從C到B都使用的是startActivity的方式,因此Activity之間切換的動畫都是 開啟新Activity 的樣式。例如,無論從B到C或者從C到B,新頁面都是從右側進入,給人的感覺似乎一直在創建新Activity,很不友好。
解決這個問題的方法是自定義Activity之間切換的動畫,目的是給用戶一種感覺:從C到B的時候是新開Activity(B從右側進入),而從B到C的時候是“返回”(C從左側進入)。只需一行代碼:
overridePendingTransition(in, out);in:進入的Activity的動畫; out:退出的Activity的動畫。
這裡需要注意:
(1)對於普通的startActivity-finish方式,如果需要自定義Activity之間切換的動畫,只需將上述代碼寫在startActivity或finish之後即可:
(2)但是,本文中由於使用了FLAG_ACTIVITY_REORDER_TO_FRONT的方式,上述動畫將只在第一次創建頁面B或C的時候有效。解決方法是,將上述代碼寫在onNewIntent中。例如從B到C,則在C中onNewIntent中寫上這行代碼,指定C進入的樣式和B退出的樣式。
7.動畫資源:
(1)Activity從左側退出:
下一篇文章中,將使用此種方式實現仿QQ照片選擇功能,盡情期待。
ListView中的下拉刷新是非常常見的,也是經常使用的,看到有很多同學想要,那我就整理一下,供大家參考。那我就不解釋,直接上代碼了。這裡需要自己重寫一下ListView
開學到現在一直都在學著去搞明白一個簡單的游戲。寫完代碼之後,發現主界面顯示的某些圖片比正常的大了許多。本來以為是代碼寫錯了,反反復復,來來回回的檢查代碼,真心沒有錯誤。。
在Andoird使用Android自帶的那些組件,像SlidingDrawer和DrawerLayout都是抽屜效果的菜單,但是在項目很多要實現的功能都收到Android
Bitmap如何加載Bitmap可以認為是Android系統將圖片加載GPU的一個映射,Android可以讀取png格式的,也可以讀取jpg格式的。那麼Android是如