Sean's Note: 4月 2013

2013年4月16日 星期二

使用 Animation 的簡單步驟

要讓 Android 的元件產生動畫效果,幾個步驟如下:
  1. 宣告一個 Animation animation 物件並設定動畫相關屬性。
  2. animation.setDuration(200) : 必要,動畫時間長度。
  3. animation.setFillAfter(true): 非必要,預設為 false,是否停留在動畫結束後的畫面。
  4. animation.setInterpolation(new Interpolator()): 非必要,預設為 LinearInterpolator,也可設
    定成 AccelerateInterpolater(加速) 或 CycleInterpolator(轉圈)。設定動畫的效果。
  5. animation.setAnimationListener(): 設定一個監聽者,可控制動畫前後要做什麼事。
  6. 最後,呼叫 View.startAnimation(animation),動畫即開始。
詳細可參考 Android 的 Example -> ApiDemo -> Transition3d.java

2013年4月11日 星期四

Eclipse useful hotkeys

Most Used:

F3 尋找定義

ctrl + shift + G References in workspace

ctrl + G Declaration in workspace

ctrl + M 將目前 focus 的視窗放大最大

ctrl + / 註解 (取消註解)

ctrl + shift + O 自動匯入所欠缺的類別

alt + ← 移至上一次游標所在位置

alt + → 移至下一次游標所在位置

ctrl + shift + X 大寫字母  (在寫 constant 的時候頗實用)

ctrl+shift+R Open Resource (找 file 用它就對了)

Sometimes Used:

ctrl + shift + P 移至匹配的括號

ctrl + shift + L 列出所有快速鍵

ctrl + D 刪除單一行

ctrl + shift + F 程式碼自動排版

ctrl + shift + Y 小寫字母

alt + shift + J 加入Java doc說明

ctrl + shift + T search (用來找類別)

ctrl+F11 快速執行

F11 快速執行(Debug模式)

ctrl+K 快速搜尋選取的字(有點像瀏覽器搜尋的 F3)

SVN IDE for Eclipse

提供 Eclipse 的 SVN IDE 套件主要有 Subclipse 和 Subversive,而兩者有何不同呢?

從網路上搜尋的結果看來,功能都差不多強大,只是 Subclipse 由 SVN 官方所推出,

Subversive 由 Eclipse 官方所推出,愛用哪個就自己選囉。

這邊以 Subclipse 為例,其目前更新到 1.8.19 版,使用方法就和平常安裝 Plugging 一樣,

Help -> Install New Software... > Add

Location: http://subclipse.tigris.org/update_1.8.x

安裝完後,在 Navigator 視窗裡的空白處按下滑鼠右鍵 -> Team 即可看到常用的 SVN

功能。

2013年4月10日 星期三

Advanced Uses of Enum

常見的 Enum 用法大多如下:
public enum EnumMenu{
   APPLE,
   BANANNA,
   CHEESE
}

其實 Enum 可以更好用,假如我們今天有個菜單分別有名稱和價錢兩個屬性,我們便可以建立

Enum 的 Constructor 使其可以輸入名稱和價錢。之後,還可以拿名稱和價錢來做一些運算,例

如格式化文字的輸出,只要 Override toString() 即可。

public enum EnumMenu{
   APPLE("Apple", 10),
   BANANNA("Bananna", 20),
   CHEESE("Cheese", 30);

   private String name;       
   private int price;   
 
   private EnumMenu(String name, int price) {
      this.name = name;
      this.price = price;
   }
 
   public String toString(){
      return "Name: " + name + ", Price: " + price; 
   }
}

// System.out.println(EnumMenu.APPLE); // Name: apple, Price: 10

2013年4月9日 星期二

Enable Intellisense for Eclipse

Intellisense 可以讓使用者在敲首字時即開始提示,Eclipse 預設雖然有開啟這項功能,
但只有當按下 . 的時候才有作用,否則必須要按 Alt + / 才會出現選單以供選擇。
想要開啟如同 VS 首字開始自動提示的功能的話,步驟如下:
1. 工具列 Windows -> Preferences
2. 開啟對話視窗後 Java -> Editor -> Content Assist
3. 勾選 "Enable auto-activation" 的選項
Auto activation delay 為提示出現的延遲時間。
Auto activation triggers for Java 為 IDE 遇到何種字元會自動啟動提示,預設只有 dot,改成 .abcdefghijklmnopqrstuvwxyz(,
Auto activation triggers for Javadoc 在註解區塊中遇到何種字元會啟動提示,預設是 @ 及 #
改完後 Apply  -> OK

2013年4月8日 星期一

About Service

  1. Service 是個背景程序,當 App 和使用者已經沒有互動時,它還能夠在背後
    繼續運算。
  2. Service 本身並不是一個 thread,它作運用於 main thread 之中。

ServiceConnectionLeaked

離開 Acitivy 的時候,Eclipse 跑出 ServiceConnectionLeaked 這個錯誤訊息,

後來發現是結束 Acitivy 時,需要在呼叫 unbindService(myService)。

2013年4月2日 星期二

使用 Socket 前要注意的二三事

  1. 不應該在 UI thread 建立 Socket。(For Android)
  2. socket.isClosed() 只能判斷 local 端的 socket 是否被關閉了,無法判斷 remote 端的,
    例如即使 Client 已關閉 socket,在 Server 端呼叫 isClosed() 還是會拿到 FALSE。
    想判斷是否還可正常連線,就只能直接 read/write 看看,如果 read() 回傳 -1,就代
    表連線可能已經中斷導致 Stream 也被關閉,再也拿不到資料 (EOF)。
  3. 當兩邊 Stream 建立時,一方的 read() 通常會被 block 住,但如果另一方的 Stream
    突然被關閉,此時的 read() 再也不會被 block,而是不斷的回傳 -1 (EOF)。