以下的API LEVEL需求為14以上
低可見度
this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
隱藏
this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
在這裡要注意的是,這些動作都是一次性的
當事件觸發虛擬鍵導致虛擬鍵的狀態被設定為顯示的時候
如果不再去設定它的狀態,他將會一直維持
同場加映:三秒中自動將虛擬鍵低可見化
private Handler myHandler = new Handler();
private Runnable runTimerStop = new Runnable() {
@Override
public void run() {
hideNavigation();
}
};
private void hideNavigation() {
if (Build.VERSION.SDK_INT > 13)
this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
}
//在dispatchKeyEvent中增加下列
myHandler.removeCallbacks(runTimerStop);
myHandler.postDelayed(runTimerStop, 3000);
2013年8月12日 星期一
2013年3月10日 星期日
[Cocos2d-x] 關於 CCTextureCache
這個東西是用來管理Texture的快取
最近發現同事常常在使用一張圖片後
馬上就下了 CCTextureCache::shareTextureCache()->removeTextureForKey
感覺起來好像沒有什麼錯,用了一張圖之後就把他從快取移出
但這個部份有個很大的問題
當我們使用 removeTextureForKey的時候他會做兩件事情
第一件是從管理列表中移除這個Texture資料
第二件是"嘗試"移除 Texture
關鍵就在於他去移除 Texture的時候,那個Texture是有人在使用的
所以他不會真的去移除它,但是他卻從我們管理的清單中被移除了
隨然Texture有AutoRelease的機制,但卻無法掌握他什麼時候才會被釋放
也無法掌握現在到底用了多少資源在什麼地方上
結論就是要移除Texture的話,請先移除使用它的物件
然後使用 removeUnuseTexture
ps. removeUnuseTexture 算是蠻吃資源與時間 請審慎評估使用時機
最近發現同事常常在使用一張圖片後
馬上就下了 CCTextureCache::shareTextureCache()->removeTextureForKey
感覺起來好像沒有什麼錯,用了一張圖之後就把他從快取移出
但這個部份有個很大的問題
當我們使用 removeTextureForKey的時候他會做兩件事情
第一件是從管理列表中移除這個Texture資料
第二件是"嘗試"移除 Texture
關鍵就在於他去移除 Texture的時候,那個Texture是有人在使用的
所以他不會真的去移除它,但是他卻從我們管理的清單中被移除了
隨然Texture有AutoRelease的機制,但卻無法掌握他什麼時候才會被釋放
也無法掌握現在到底用了多少資源在什麼地方上
結論就是要移除Texture的話,請先移除使用它的物件
然後使用 removeUnuseTexture
ps. removeUnuseTexture 算是蠻吃資源與時間 請審慎評估使用時機
2012年11月7日 星期三
[Android] Notification
Notification是指畫面上方資訊列的訊息提示
//先取出Notification管理員
NotificationManager notificationManager =
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
//產生一個Notification
Notification notification= new Notificatio( R.deawable.icon, "This is Message", System.currentTimeMills());
//建立Intent
Intent intent = new Intent(context,ActivityName.class);
//建立PendingIntent
PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent ,0);
//設定 Notification內容
notification.setLatestEventInfo(context,"This is Title","This is Message",pendingIntent);
//發送 Notification
notificationManager.notify(0,notification);
//先取出Notification管理員
NotificationManager notificationManager =
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
//產生一個Notification
Notification notification= new Notificatio( R.deawable.icon, "This is Message", System.currentTimeMills());
//建立Intent
Intent intent = new Intent(context,ActivityName.class);
//建立PendingIntent
PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent ,0);
//設定 Notification內容
notification.setLatestEventInfo(context,"This is Title","This is Message",pendingIntent);
//發送 Notification
notificationManager.notify(0,notification);
2012年6月5日 星期二
[ActionScript3] get 與 set
AS3跟JAVA真的很像,當然get跟set的用法也類似
但還是有一些地方不同
get與set主要的用途是滿足封裝的概念
讓人無法知道以及隨意變更被封裝的函式與變數
get是用來取值,set是用來給值
參考下面程式碼
由於number的private屬性,所以無法直接存取,需要使用其他方法來完成
而AS3中get跟set最大的特點就是
只用這兩個關鍵字的函式會被當成實體而不是函式
使用的方式直接如同一邊變數下去使用就可以了
但還是有一些地方不同
get與set主要的用途是滿足封裝的概念
讓人無法知道以及隨意變更被封裝的函式與變數
get是用來取值,set是用來給值
參考下面程式碼
public class Main extends Sprite
{
private var number:int=0;
public function Main():void
{
}
public function set Number(x:int):void
{
number = x;
}
public function get Number():int
{
return number;
}
}
由於number的private屬性,所以無法直接存取,需要使用其他方法來完成
而AS3中get跟set最大的特點就是
只用這兩個關鍵字的函式會被當成實體而不是函式
使用的方式直接如同一邊變數下去使用就可以了
var test:Main=new Main; test.Number=100; //將number設成100 trace(test.Number); //取出number的值並印出
2012年6月3日 星期日
[ActionScript3] enum in AS3
在ActionScript3裡面沒有enum這個東西可以直接用
不過可以透過宣告靜態(static)與常數(const)來達成我們要的效果
下面舉一個水果盤的列舉集合來作例子
當宣告static代表這個物件是屬於類別而不是實體
所以在使用的時候要使用類別名稱而不是實體名稱
而宣告const的代表他是常數,是無法被變更的
不過可以透過宣告靜態(static)與常數(const)來達成我們要的效果
下面舉一個水果盤的列舉集合來作例子
public class SYNBOL_DEFINE
{
static public const SYM_BLUE_7 :uint = 0; // 藍 7
static public const SYM_RED_7 :uint = 1; // 紅 7
static public const SYM_BAR_3 :uint = 2; // BAR 3
static public const SYM_BAR_2 :uint = 3; // BAR 2
static public const SYM_BAR_1 :uint = 4; // BAR 1
static public const SYM_MELON :uint = 5; // 西瓜
static public const SYM_BELL :uint = 6; // 葡萄
static public const SYM_MANGO :uint = 7; // 芒果
static public const SYM_ORANGE :uint = 8; // 橘子
static public const SYM_CHERRY :uint = 9; // 櫻桃
static public const SYM_I :uint = 10; // i 寶寶
static public const SYM_G :uint = 11; // G
static public const SYM_JOKER :uint = 12; // Joker
}
當宣告static代表這個物件是屬於類別而不是實體
所以在使用的時候要使用類別名稱而不是實體名稱
var simple:SYNBOL_DEFINE=new SYNBOL_DEFINE; simple.SYM_BLUE_7; // 會產生錯誤 SYNBOL_DEFINE.SYM_BLUE_7 //正確用法
而宣告const的代表他是常數,是無法被變更的
2012年6月2日 星期六
[C/C++] 列舉(enum)
列舉主要的應用是在增加程式的可讀性
尤其是大型多人專案
以下舉個小例子來說明:
今天我們寫了一個ShowWeapon的函式
public void ShowWeapon(int x)
{
cout << "your weapon is"
switch(x)
{
case:1
cout << "Axe";
break;
case:2
cout << "Staff";
break;
case:3
cout << "Dagger";
break;
}
}
當我們使用
ShowWeapon(1); // point "your weapon is Axe"給他1它會印出Axe 2就是Staff 3就是Dagger
在寫程式的當下會很爽
但是等你過幾天回來或是這個程式給別人維護的時候就會很不爽了
天殺的,誰知道你的代入值1,2,3是什麼意思
這個時候我們在前面加上enum的話會變成
enum Weapon : int
{
Axe = 1,
Staff = 2,
Dagger = 3
}
public void ShowWeapon(int x)
{
cout << "your weapon is"
switch(x)
{
case:1
cout << "Axe";
break;
case:2
cout << "Staff";
break;
case:3
cout << "Dagger";
break;
}
}
原本的ShowWeapon就可以這麼用
ShowWeapon(Weapon:Axe); // point "your weapon is Axe" ShowWeapon(Weapon:Staff); // point "your weapon is Staff" ShowWeapon(Weapon:Dagger); // point "your weapon is Dagger"
可以讓自己也讓後面維護的人清楚這個位置的代入值要填入些什麼
也可以約束填入的內容才不會發生未預期到的錯誤
以上面的例子來說,如果沒有使用enum的話,很可能會出現4,5,6這類超出原本預期的數值
而使用enum後,把所有可以填的數值都規範在enum結構裡了
訂閱:
文章 (Atom)