大家好,我是奶綠茶
分享幾個覺得不錯的 UI 設計網站。
http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#templatespack
http://speckyboy.com/2010/05/10/android-app-developers-gui-kits-icons-fonts-and-tools/
http://mobile.tutsplus.com/
http://www.webdesignshock.com/freebies/free-photoshop-android-interface-gui/
http://designmoo.com/resource/call-to-action-buttons/
http://dribbble.com/julien
http://tapfancy.com/
enjoy it!
2010年11月30日星期二
2010年11月29日星期一
Remote Device Controller in AIR for Android
大家好,我是奶綠茶
最近在研究 Android
一直在想什麼的功能, 一定要用 Adobe AIR 來寫
後來在 flashrealtime 網站上看到這一篇教學, 覺得很有趣, 就自已來實作一個
把自已之前練習的 PV3D 紙飛機 Game 加上 P2P 的程式
而 Android 端的程式是直接用 flashrealtime 提供的原始碼
方法是使用 FP10.1 的 P2P技術
只要二端是在同一個網域, 不需使用 FMS 也可以連線。
參考文章:
http://www.flashrealtime.com/game-remote-device-controller/
轉載請註明出處
最近在研究 Android
一直在想什麼的功能, 一定要用 Adobe AIR 來寫
後來在 flashrealtime 網站上看到這一篇教學, 覺得很有趣, 就自已來實作一個
把自已之前練習的 PV3D 紙飛機 Game 加上 P2P 的程式
而 Android 端的程式是直接用 flashrealtime 提供的原始碼
方法是使用 FP10.1 的 P2P技術
只要二端是在同一個網域, 不需使用 FMS 也可以連線。
參考文章:
http://www.flashrealtime.com/game-remote-device-controller/
轉載請註明出處
2010年11月26日星期五
米蘭創意種子(實習生)招募中!!
原文:http://medialand.com.tw/blog/article.asp?id=1295
實習不只為了學分,更為了灌溉自己
這次的實習生招募,不限於寒暑假,希望是更深入的培育
米蘭期待找到這樣的種子↓
數位向陽性;
內含許多有趣的idea成分;
對新事物能產生一連串化學變化;
並有努力想成長茁壯的積極熱血。
1.實習需求
創意企劃實習 1~2名
內容說明:
米蘭的創意企劃工作範疇,著重在創意發展,也講究細節規劃
如果你很積極,你可以學習到
如何發展一個網路廣告或病毒影片的腳本
如何規劃一個網站或網路活動的玩法、單元內容、頁面文案撰寫、動線思考…
如何思考一個數位行銷的創意
甚至 更多!!
評估依據
創意 (30%):作品的策略思考、創意概念、文案與畫面的整體表現
認知 (30%):平常對於網路生態、廣告傳播的觀察和了解
熱忱 (30% ) :對創意與數位的熱忱
反應能力(10%):臨場表現和清楚的表達能力
聯絡與收件窗口:Carol 電話:27390000轉131
carol@mail.medialand.com.tw
信件主旨:[應徵米蘭創意種子-企劃實習,我是<<你的姓名>>]
設計實習 1~2名
內容說明:
米蘭設計師工作範疇,著重在設計執行及視覺創意表現
如果你很積極,你可以學習到
如何完成一個高質感與創意兼具的作品
如何執行一個完整專案從創意發想、動線思考、單元頁面到完成上線
如何整合設計資源做最有效的發揮
甚至 更多!!
評估依據
技術 (30%) :軟體熟悉度及呈現的質感
創意 (30%) :個人作品呈現的方式與內容
熱忱 (30% ):對於設計的用心與堅持
表現度(10% ): 臨場表現,應對之間表現的談吐及態度
聯絡與收件窗口:Cheney 電話:27390000轉162
cheney@mail.medialand.com.tw
信件主旨:[應徵米蘭創意種子-設計實習,我是<<你的姓名>>]
2.報名期間: 11/25(四)~01/17(一) 24:00止
3.面試期間: 01/18(二)~01/26(三),錄取通知:1/27(四)
4.實習時間: 02/14 Start,預計至6月底結束,每周至少來三天
5.應徵文件:參與應徵者請務必提供以下內容
A.個人基本資料
姓名、生日、聯絡方式、學經歷、待修學分list、並附上近期清晰照片乙張
B.我的網路履歷表
i.使用網路的年資
ii.使用或造訪過哪些網站,其中最喜歡哪個網站?為什麼?
iii.你的個人平台連結與介紹 (例如:Blog、Plurk、twitter、FunP、facebook、flickr、delicious、黑米…)
iv.你在虛擬的網路中,有哪些傲人的身分或成績?
(例如:線上遊戲團長或幹部、巴哈姆特Lv3等級以上、噗浪的Karma超高、擔任過批踢踢小天使或版主、在youtube或blog上的作品曾經被廣為傳閱…)
C.個人作品集(或作品網站、部落格)
D.我的熱情宣言
i. 你所認知的米蘭,以及想來米蘭實習的原因
ii. 你最喜歡米蘭的作品及原因
本次的實習期間屬於學期中實習,也請報名者先考量課業loading喔 ^^
實習不只為了學分,更為了灌溉自己
這次的實習生招募,不限於寒暑假,希望是更深入的培育
米蘭期待找到這樣的種子↓
數位向陽性;
內含許多有趣的idea成分;
對新事物能產生一連串化學變化;
並有努力想成長茁壯的積極熱血。
1.實習需求
創意企劃實習 1~2名
內容說明:
米蘭的創意企劃工作範疇,著重在創意發展,也講究細節規劃
如果你很積極,你可以學習到
如何發展一個網路廣告或病毒影片的腳本
如何規劃一個網站或網路活動的玩法、單元內容、頁面文案撰寫、動線思考…
如何思考一個數位行銷的創意
甚至 更多!!
評估依據
創意 (30%):作品的策略思考、創意概念、文案與畫面的整體表現
認知 (30%):平常對於網路生態、廣告傳播的觀察和了解
熱忱 (30% ) :對創意與數位的熱忱
反應能力(10%):臨場表現和清楚的表達能力
聯絡與收件窗口:Carol 電話:27390000轉131
carol@mail.medialand.com.tw
信件主旨:[應徵米蘭創意種子-企劃實習,我是<<你的姓名>>]
設計實習 1~2名
內容說明:
米蘭設計師工作範疇,著重在設計執行及視覺創意表現
如果你很積極,你可以學習到
如何完成一個高質感與創意兼具的作品
如何執行一個完整專案從創意發想、動線思考、單元頁面到完成上線
如何整合設計資源做最有效的發揮
甚至 更多!!
評估依據
技術 (30%) :軟體熟悉度及呈現的質感
創意 (30%) :個人作品呈現的方式與內容
熱忱 (30% ):對於設計的用心與堅持
表現度(10% ): 臨場表現,應對之間表現的談吐及態度
聯絡與收件窗口:Cheney 電話:27390000轉162
cheney@mail.medialand.com.tw
信件主旨:[應徵米蘭創意種子-設計實習,我是<<你的姓名>>]
2.報名期間: 11/25(四)~01/17(一) 24:00止
3.面試期間: 01/18(二)~01/26(三),錄取通知:1/27(四)
4.實習時間: 02/14 Start,預計至6月底結束,每周至少來三天
5.應徵文件:參與應徵者請務必提供以下內容
A.個人基本資料
姓名、生日、聯絡方式、學經歷、待修學分list、並附上近期清晰照片乙張
B.我的網路履歷表
i.使用網路的年資
ii.使用或造訪過哪些網站,其中最喜歡哪個網站?為什麼?
iii.你的個人平台連結與介紹 (例如:Blog、Plurk、twitter、FunP、facebook、flickr、delicious、黑米…)
iv.你在虛擬的網路中,有哪些傲人的身分或成績?
(例如:線上遊戲團長或幹部、巴哈姆特Lv3等級以上、噗浪的Karma超高、擔任過批踢踢小天使或版主、在youtube或blog上的作品曾經被廣為傳閱…)
C.個人作品集(或作品網站、部落格)
D.我的熱情宣言
i. 你所認知的米蘭,以及想來米蘭實習的原因
ii. 你最喜歡米蘭的作品及原因
本次的實習期間屬於學期中實習,也請報名者先考量課業loading喔 ^^
2010年11月16日星期二
FlashAS3 Countdown
大家好,我是奶綠茶
Countdown在 flash 的專案裡,應該也是很常出現的吧
所以我就把他包裝成一個 class , 方便使用
預設是抓取 client 端的時間
如果想要以伺服器時間為主的話
也只要使用 URLLoader 透過伺服器程式回傳時間
再更新我所寫的 Countdown類別可以。
Countdown.as
Countdown在 flash 的專案裡,應該也是很常出現的吧
所以我就把他包裝成一個 class , 方便使用
預設是抓取 client 端的時間
如果想要以伺服器時間為主的話
也只要使用 URLLoader 透過伺服器程式回傳時間
再更新我所寫的 Countdown類別可以。
Countdown.as
/**
* @author milkmidi
* @see http://milkmidi.blogspot.com
* @version 1.0.1
* @date created 2010/11/16/
*/
package milkmidi.utils {
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.TimerEvent;
import flash.utils.Timer;
[Event(name = "countDownComplete" , type = "milkmidi.utils.Countdown")]
[Event(name = "countDownUpdate" , type = "milkmidi.utils.Countdown")]
public class Countdown extends EventDispatcher {
public static const COUNTDOWN_COMPLETE :String = "countDownComplete";
public static const COUNTDOWN_UPDATE :String = "countDownUpdate";
private static const SEC :uint = 1000;
private static const MIN :uint = SEC * 60;
private static const HOUR :uint = MIN * 60;
private static const DAY :uint = HOUR * 24;
private var _endYear :uint;
private var _endMonth :uint;
private var _endDay :uint;
private var _endHour :uint;
private var _endMin :uint;
private var _endDate :Date;
//
private var _year :int;
private var _month :int;
private var _day :int;
private var _hour :int;
private var _min :int;
private var _sec :int;
private var _timer :Timer = new Timer(1000);
private var _today :Date;
/**
*
* @param pYear
* @param pMonth
* @param pDay
* @param pHour
* @param pMin
*/
public function Countdown( pYear:uint, pMonth:uint , pDay:uint , pHour:uint = 0, pMin:uint = 0 ) {
_endYear = pYear ;
_endMonth = pMonth - 1;
_endDay = pDay;
_endHour = pHour;
_endMin = pMin;
_endDate = new Date(_endYear, _endMonth , _endDay, _endHour , _endMin);
_timer.addEventListener(TimerEvent.TIMER , timerHandler);
}
/**
*
* @param pYear
* @param pMonth
* @param pDay
* @param pHour
* @param pMin
*/
public function setNewDate(pYear:uint, pMonth:uint , pDay:uint , pHour:uint = 0, pMin:uint = 0):void {
_today = new Date(pYear , pMonth - 1 , pDay , pHour , pMin);
}
public function start():void {
_timer.start();
timerHandler(null);
}
public function stop():void {
_timer.stop();
}
private function timerHandler(e:TimerEvent):void {
var _todayDate:Date;
if (_today == null)
_todayDate = new Date();
else
_todayDate = new Date(_today.getTime() + _timer.currentCount * 1000);
var differ :Number = _endDate.getTime() - _todayDate.getTime();
_day = Math.floor(differ / DAY);
differ -= _day * DAY;
_hour = Math.floor(differ / HOUR);
differ -= _hour * HOUR;
_min = Math.floor(differ / MIN);
differ -= _min * MIN;
_sec = Math.floor(differ / SEC);
if (_day < 0) {
stop();
_year = _month = _day = _hour = _min = _sec = 0;
dispatchEvent(new Event(COUNTDOWN_COMPLETE));
}else {
dispatchEvent(new Event(COUNTDOWN_UPDATE));
}
}
public function destroy():void {
stop();
_timer = null;
}
public function get year() :uint { return _year; }
public function get sec() :uint { return _sec; }
public function get min() :uint { return _min; }
public function get hour() :uint { return _hour; }
public function get day() :uint { return _day; }
public function get month() :uint { return _month; }
override public function toString():String {
return "year:" + year + " month:" + month + " day:" + day + " hour:" + hour + " min:" + min + " sec:" + sec;
}
}
}
測試:
/**
* @mxmlc -o deploy/CountdownDemo.swf -default-size 800 600 -optimize=true -default-frame-rate=36 -default-background-color=0xffffff -debug=false
* @author milkmidi
* @see http://milkmidi.blogspot.com
* @version 1.0.1
* @date created 2010/11/16/
*/
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import milkmidi.utils.Countdown;
public class CountdownDemo extends Sprite {
private var _tf:TextField;
private var _cd:Countdown;
public function CountdownDemo() {
addChild(_tf = new TextField);
_tf.width = 300;
//預設是使用 client 端的時間
_cd = new Countdown(2010, 12, 31);
_cd.addEventListener(Countdown.COUNTDOWN_UPDATE , _countDownUpDateHandler);
_cd.addEventListener(Countdown.COUNTDOWN_COMPLETE , _countDownCompleteHandler);
_cd.start();
// 從伺服器抓到正確的時間後, 把時間填寫入函式,即可更新
//_cd.setNewDate(年,月,日,時,分)
}
private function _countDownCompleteHandler(e:Event):void {
_tf.text = "Happy new year";
}
private function _countDownUpDateHandler(e:Event):void {
_tf.text = _cd.toString();
}
}
}轉載請註明出處 http://milkmidi.blogspot.com/2010/11/flashas3-countdown.html
2010年11月2日星期二
android開發心得1
大家好,我是奶綠茶
來筆記一下 android(Java) 的程式開發和 flash 之間的差別
宣告:
Java:類別當作宣告字(同C#)
String a = "字串";
AS3:使用var加上:類別的方式
var a:String = "字串";
function 宣告:
Java:回傳的型別寫在前方(同C#)
public void testFun(){
}
AS3:回傳的型別使用:型別
public function testFun():void{
}
Overloading:多載, 同以有一樣的函式名稱, 只要引數個數不同,或是引數型態不同
Java:支援(同C#)
public void testFun(){}
public void testFun(String pName){}
AS3:不支援
override:覆寫, 子類別繼承父類別, 但可改寫父類別的方法, 回傳值和引數必需皆相同
Java:支援
子類別直接寫和父類別一樣的方法即可
AS3:需加入 override 的關鍵字
function protected override testFun():void{
}
package:套件包(這個好難翻成中文)
Java:在類別的最上方輸入, 使用分號結速
package milkmidi.android;
public class xxxx(){}
AS3:在類別的最上方輸入, 使用大括號包住下方 class
package milkmidi.android{
public class xxxx(){}
}
繼承: 使用 extends 關鍵字
Java和AS3皆相同
Java和AS3皆是單一繼承
Java支援 private class, 所以可以 class 再寫一個 class
AS3不支援 private class, 最多能在 package 外寫一個 internal 的class
修飾字:private,protected,internal,public
Java和AS3皆相同
Set,Get:
Java:只能使用function來擴充
private String name;
public String getName(){return name;}
public void setName(String pName){name = pName;}
AS3:
private var _name:String;
public function set name(pName):void{ _name = pName;}
public function get name():String {return _name}
interface:介面
Java:支援 static 的介面
AS3:不支援(誤, 應為)
Focus1921 提到...
在Interface的部分,「AS3不支援」應該明確指出不支援static,但支援一般的介面 : )
常數宣告:
Java:使用 final
private final String TAG = "milkmidi";
AS3:使用 const
private const TAG:String = "milkmidi";
目前想到這些,有心得再來補上,
如有錯誤,麻煩跟我說,感謝
來筆記一下 android(Java) 的程式開發和 flash 之間的差別
宣告:
Java:類別當作宣告字(同C#)
String a = "字串";
AS3:使用var加上:類別的方式
var a:String = "字串";
function 宣告:
Java:回傳的型別寫在前方(同C#)
public void testFun(){
}
AS3:回傳的型別使用:型別
public function testFun():void{
}
Overloading:多載, 同以有一樣的函式名稱, 只要引數個數不同,或是引數型態不同
Java:支援(同C#)
public void testFun(){}
public void testFun(String pName){}
AS3:不支援
override:覆寫, 子類別繼承父類別, 但可改寫父類別的方法, 回傳值和引數必需皆相同
Java:支援
子類別直接寫和父類別一樣的方法即可
AS3:需加入 override 的關鍵字
function protected override testFun():void{
}
package:套件包(這個好難翻成中文)
Java:在類別的最上方輸入, 使用分號結速
package milkmidi.android;
public class xxxx(){}
AS3:在類別的最上方輸入, 使用大括號包住下方 class
package milkmidi.android{
public class xxxx(){}
}
繼承: 使用 extends 關鍵字
Java和AS3皆相同
Java和AS3皆是單一繼承
Java支援 private class, 所以可以 class 再寫一個 class
AS3不支援 private class, 最多能在 package 外寫一個 internal 的class
修飾字:private,protected,internal,public
Java和AS3皆相同
Set,Get:
Java:只能使用function來擴充
private String name;
public String getName(){return name;}
public void setName(String pName){name = pName;}
AS3:
private var _name:String;
public function set name(pName):void{ _name = pName;}
public function get name():String {return _name}
interface:介面
Java:支援 static 的介面
AS3:不支援(誤, 應為)
Focus1921 提到...
在Interface的部分,「AS3不支援」應該明確指出不支援static,但支援一般的介面 : )
常數宣告:
Java:使用 final
private final String TAG = "milkmidi";
AS3:使用 const
private const TAG:String = "milkmidi";
目前想到這些,有心得再來補上,
如有錯誤,麻煩跟我說,感謝
android開發心得2
大家好,我是奶綠茶
研究了一陣子的 Android 開發,寫點心得來記錄一下,不然一直忘東忘西的
在使用 eclipse 開發時
會很自然的切換到 xml 來編輯 layout 或是 resource
如果此時按下 run
會產生 xxx.out.xml的錯誤, 天呀, 這什麼問題
這個問題困擾我好久, Google了一下發現
在 eclipse 中編輯 xml 檔案, 會預設用 xsl 來轉換(我也不清楚什麼是 xsl 待好心人幫我解惑)
決法1:
要執行時, 把焦點由 xml 移開到專案
在 Project->Clean 清除目前的編譯
刪除多餘的 xxx.out.xml
再重新 run 一次
超麻煩, 還好有 google , 找到另一個方法,一次決解他
決法2:
http://www.cnblogs.com/chunhui588/archive/2010/06/26/Android-debug-main-out-xml-parsing-error.html
這樣就清爽多了.
研究了一陣子的 Android 開發,寫點心得來記錄一下,不然一直忘東忘西的
在使用 eclipse 開發時
會很自然的切換到 xml 來編輯 layout 或是 resource
如果此時按下 run
會產生 xxx.out.xml的錯誤, 天呀, 這什麼問題
這個問題困擾我好久, Google了一下發現
在 eclipse 中編輯 xml 檔案, 會預設用 xsl 來轉換(我也不清楚什麼是 xsl 待好心人幫我解惑)
決法1:
要執行時, 把焦點由 xml 移開到專案
在 Project->Clean 清除目前的編譯
刪除多餘的 xxx.out.xml
再重新 run 一次
超麻煩, 還好有 google , 找到另一個方法,一次決解他
決法2:
http://www.cnblogs.com/chunhui588/archive/2010/06/26/Android-debug-main-out-xml-parsing-error.html
這樣就清爽多了.
訂閱:
文章 (Atom)