<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0QMRX07fyp7ImA9WhRVGEg.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796</id><updated>2012-01-18T10:56:24.307+08:00</updated><category term="Fluorine" /><category term="puremvc" /><category term="html5" /><category term="Game" /><category term="Friends" /><category term="adobe" /><category term="CoolWeb" /><category term="userInterface" /><category term="Flash10.2" /><category term="FLASHAS2" /><category term="ZedBox" /><category term="FLASHAS3" /><category term="FLASHCS5" /><category term="ios" /><category term="android layout" /><category term="study" /><category term="extension" /><category term="remoting" /><category term="TweenMax" /><category term="Flex" /><category term="catalyst" /><category term="Events" /><category term="Flash10" /><category term="MQuery" /><category term="facebook" /><category term="debug" /><category term="virtual3d" /><category term="other" /><category term="FLASHCS3" /><category term="medialand" /><category term="silverlight" /><category term="robotlegs" /><category term="Tweener" /><category term="AIR" /><category term="effect" /><category term="designPatterns" /><category term="music" /><category term="away3d" /><category term="Dreamweaver" /><category term="PV3D" /><category term="Flash11" /><category term="mxml" /><category term="新聞區" /><category term="android" /><category term="flycan" /><category term="flashdevelop" /><category term="html" /><category term="FLARToolKit" /><category term="Anteater" /><category term="asp.net" /><category term="milkmidiBook" /><category term="Flash10.1" /><category term="components" /><category term="FLASHCS4" /><category term="JavaScript" /><category term="Progression4" /><category term="progression" /><category term="flashP2P" /><title>milkmidi Blog</title><subtitle type="html">~Design Life~
milkmidi,奶綠茶,flash</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://milkmidi.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>296</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MilkmidiBlog" /><feedburner:info uri="milkmidiblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUUBQng8cCp7ImA9WhRVEEo.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-3311839172472073373</id><published>2012-01-09T10:47:00.000+08:00</published><updated>2012-01-09T10:47:33.678+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-09T10:47:33.678+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android Back Key</title><content type="html">&lt;div id="fullpost"&gt;
大家好，我是奶綠茶&lt;br /&gt;
在使用 Android 時，有時會不小心按到 Back 鍵而離開應用程式&lt;br /&gt;
理想的操作，應該要有個提示讓使用者知道是否要離開。&lt;br /&gt;
只要 Override Activity 的 onKeyDown 事件，&lt;br /&gt;
加上提示的程式即可&lt;br /&gt;
常用的方法有二個，&lt;br /&gt;
1. 使用 Toast 提示，在一定的時間內按二次 Back 鍵&lt;br /&gt;
&lt;pre class="brush: java;"&gt;
private long exitTime = 0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 if(keyCode == KeyEvent.KEYCODE_BACK
   &amp;&amp; event.getAction() == KeyEvent.ACTION_DOWN){
     if((System.currentTimeMillis()-exitTime) &gt; 2000){
         Toast.makeText(getContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
         exitTime = System.currentTimeMillis();
  } else {
   finish();
   System.exit(0);
  }
     return true;
    }
 return super.onKeyDown(keyCode, event);
}

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
2. 使用 AlertDialog ，讓使用者自行決定。&lt;br /&gt;
&lt;pre class="brush: java;"&gt;
new AlertDialog.Builder( getContext)
.setIcon(R.drawable.icon_info).setTitle("  ")
.setMessage("確定要離開應用程式嗎?")
.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
}).setNeutralButton("確定", new OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
  finish();
   System.exit(0);
 }
}).create().show();
&lt;/pre&gt;
轉載請註明出處 
&lt;br /&gt;


&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-3311839172472073373?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3EAvT2wpMF09oLbDn6gf1KKa3Y4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3EAvT2wpMF09oLbDn6gf1KKa3Y4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3EAvT2wpMF09oLbDn6gf1KKa3Y4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3EAvT2wpMF09oLbDn6gf1KKa3Y4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/1EbMEYTf_JY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/3311839172472073373/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=3311839172472073373" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/3311839172472073373?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/3311839172472073373?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/1EbMEYTf_JY/android-back-key.html" title="Android Back Key" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2012/01/android-back-key.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUCQ3c_cSp7ImA9WhRVEEo.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-429991518010884296</id><published>2012-01-08T22:27:00.002+08:00</published><updated>2012-01-09T10:47:42.949+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-09T10:47:42.949+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>java.lang.OutOfMemoryError: bitmap size exceeds VM budget</title><content type="html">&lt;div id="fullpost"&gt;
大家好，我是奶綠茶&lt;br /&gt;
最近在寫 Android 程式時，&lt;br /&gt;
一直發生&lt;br /&gt;
java.lang.OutOfMemoryError: bitmap size exceeds VM budget&lt;br /&gt;
這個問題&lt;br /&gt;
後來查了一下，才知道是圖檔太大，超過能使用的記憶體&lt;br /&gt;
但透過&lt;br /&gt;
BitmapFactory.Options 這個類別就可以決解。&lt;br /&gt;
&lt;pre class="brush: java;"&gt;BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);&lt;/pre&gt;
&lt;br /&gt;
其中 inSampleSize 的數值，指的是將圖片大小除以 n&lt;br /&gt;
重點就要是如何算出正確的數值。&lt;br /&gt;
官方文件有提到，該值以 2 的平方為最佳&lt;br /&gt;
先準備一張 3000x2000 的圖片，放到 raw 資料夾裡&lt;br /&gt;
再沒有使用 inSampleSize 時&lt;br /&gt;
直接 decode, 就會發生 OutOfMemory&lt;br /&gt;
&lt;br /&gt;
要算出最佳值，要對圖片 decode 二次&lt;br /&gt;
第一次先得到圖片的長、寬，然後再算出 sampleSize ,&lt;br /&gt;
第二次再 deocde 得到所需要的圖片&lt;br /&gt;
BitmapFactory.Options opt = new BitmapFactory.Options();&lt;br /&gt;
opt.inJustDecodeBounds = true; //使用這個屬性, 就只會計算，但不會分配記憶體&lt;br /&gt;
&lt;br /&gt;
Bitmap bitmap = BitmapFactory.decodeResource(res, R.raw.i3000x2000,opt);&lt;br /&gt;
trace(opt.outWidth,opt.outHeight);//得到原始圖片長、寬&lt;br /&gt;
&lt;br /&gt;
最佳 sampleSize 算法&lt;br /&gt;
&lt;br /&gt;
轉貼至：&lt;a href="http://www.maxhis.info/androiding/bitmap-size-exceed/"&gt;http://www.maxhis.info/androiding/bitmap-size-exceed/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt; public static int computeSampleSize(BitmapFactory.Options options,int maxNumOfPixels) {
  return computeSampleSize(options,-1 , maxNumOfPixels);
 }
 public static int computeSampleSize(BitmapFactory.Options options,
   int minSideLength, int maxNumOfPixels) {
  int initialSize = computeInitialSampleSize(options, minSideLength,
    maxNumOfPixels);

  int roundedSize;
  if (initialSize &amp;lt;= 8) {
   roundedSize = 1;
   while (roundedSize &amp;lt; initialSize) {
    roundedSize &amp;lt;&amp;lt;= 1;
   }
  } else {
   roundedSize = (initialSize + 7) / 8 * 8;
  }

  return roundedSize;
 }

 private static int computeInitialSampleSize(BitmapFactory.Options options,
   int minSideLength, int maxNumOfPixels) {
  double w = options.outWidth;
  double h = options.outHeight;

  int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math
    .sqrt(w * h / maxNumOfPixels));
  int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(
    Math.floor(w / minSideLength), Math.floor(h / minSideLength));

  if (upperBound &amp;lt; lowerBound) {
   // return the larger one when there is no overlapping zone.
   return lowerBound;
  }

  if ((maxNumOfPixels == -1) &amp;amp;&amp;amp; (minSideLength == -1)) {
   return 1;
  } else if (minSideLength == -1) {
   return lowerBound;
  } else {
   return upperBound;
  }
 }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
opt.inSampleSize = computeSampleSize(opt,480*800);&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;
opt.inJustDecodeBounds=false;&lt;br /&gt;
trace(opt.inSampleSize);&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;
bitmap = BitmapFactory.decodeResource(res, R.raw.i3000x2000,opt);//第二次 decode&lt;br /&gt;
完美。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
參考文章：&lt;br /&gt;
&lt;a href="http://www.maxhis.info/androiding/bitmap-size-exceed/"&gt;http://www.maxhis.info/androiding/bitmap-size-exceed/&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://julianshen.blogspot.com/2010/08/android-bitmapoutofmemoryerror.html"&gt;http://julianshen.blogspot.com/2010/08/android-bitmapoutofmemoryerror.html&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://blog.xuite.net/ffc99a3b/ooxx/44391740"&gt;http://blog.xuite.net/ffc99a3b/ooxx/44391740&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://bluegray-javalearning.blogspot.com/2011/07/android-out-of-memoryoom.html"&gt;http://bluegray-javalearning.blogspot.com/2011/07/android-out-of-memoryoom.html&lt;/a&gt;
&lt;br /&gt;
http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue&lt;br /&gt;
&lt;br /&gt;
轉載請註明出處 
&lt;br /&gt;

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-429991518010884296?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tlqHmRxYczwDP86fkS_xlayvwJ8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tlqHmRxYczwDP86fkS_xlayvwJ8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tlqHmRxYczwDP86fkS_xlayvwJ8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tlqHmRxYczwDP86fkS_xlayvwJ8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/PKTctZVcJdI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/429991518010884296/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=429991518010884296" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/429991518010884296?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/429991518010884296?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/PKTctZVcJdI/javalangoutofmemoryerror-bitmap-size.html" title="java.lang.OutOfMemoryError: bitmap size exceeds VM budget" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2012/01/javalangoutofmemoryerror-bitmap-size.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8BRHszcSp7ImA9WhRRF0Q.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-1265472098341947410</id><published>2011-11-30T10:36:00.001+08:00</published><updated>2011-12-02T11:34:15.589+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-02T11:34:15.589+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="other" /><title>批次快速更改副檔名</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
想要快速的批次更改副檔名，又不想開其他軟體時&lt;br /&gt;
可以使用 Windows 的 批次檔&lt;br /&gt;
開啟 notepad , 
輸入：
ren *.jad *.java&lt;br /&gt;
另存成 xxx.bat, 並 copy 到你想更改的資料夾裡&lt;br /&gt;
點擊二下啟動即可。&lt;br /&gt;
這句的意思就是把該 .bat 所在的資料夾下,&lt;br /&gt;
副檔名為.jad 改成.java&lt;br /&gt;
完成&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-1265472098341947410?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pmhn2m9K0-hak9FeppR6ceiJkEU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pmhn2m9K0-hak9FeppR6ceiJkEU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pmhn2m9K0-hak9FeppR6ceiJkEU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pmhn2m9K0-hak9FeppR6ceiJkEU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/CPG-PHRFo10" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/1265472098341947410/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=1265472098341947410" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1265472098341947410?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1265472098341947410?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/CPG-PHRFo10/blog-post.html" title="批次快速更改副檔名" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFQ3Yyfip7ImA9WhRREU4.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-4708655732839824022</id><published>2011-11-24T18:45:00.001+08:00</published><updated>2011-11-24T19:31:52.896+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-24T19:31:52.896+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FLASHAS3" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Flash, Android 呼叫 ASP.NET WebService</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
今天來分享如何使用 Flash 及 Android 呼叫 ASP.NET 的 WebService&lt;br /&gt;
WebService 的好處, 就是可以把專案所有要用到的方法, 寫在一隻程式裡, 方便日後管理。&lt;br /&gt;
傳接的格式, 都使用 JSON&lt;br /&gt;
.net 傳 WebService程式&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;[WebService(Namespace = "http://milkmidi.com/")] //注意這個 Namespace
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {
    private static JavaScriptSerializer serializer = new JavaScriptSerializer();
    public WebService () {
    }
   

    [WebMethod]
    public string getArray() {
        return serializer.Serialize(new string[] { "A", "B", "c" });
    }

    [WebMethod]
    public string getObject() {
        var json = new
        {
            RS = "OK"
        };
        return serializer.Serialize(json);
    }

    /// &lt;summary&gt;
    /// Client 端傳 JSON 格式, Server 端解
    /// &lt;/summary&gt;    
    [WebMethod]
    public string setObject(string json) {
        JsonObject obj = JsonConvert.Import(typeof(JsonObject), json) as JsonObject;
        string name;
        string age;
        try {
            name = obj["name"].ToString();
            age = obj["age"].ToString();
        }
        catch (Exception) {            
            throw;
        }       
        var rs = new
        {
            RS = "OK" ,
            name = name,
            age = age
        };
        return serializer.Serialize(rs);
    }
}
&lt;/pre&gt;
flash端, 使用 FlexSDK 裡的 Webservice 類別&lt;br /&gt;
使用方法如下：&lt;br /&gt;
&amp;nbsp;service.要呼叫的方法.send( 參數1, 參數2 );&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;/**
 * @author milkmidi
 */
package  {  
 import com.adobe.serialization.json.JSON;
 import flash.display.Sprite;
 import mx.rpc.events.FaultEvent;
 import mx.rpc.events.ResultEvent;
 import mx.rpc.soap.LoadEvent;
 import mx.rpc.soap.WebService;
 import mx.utils.ObjectUtil;
 public class MXWebService extends Sprite {  
  public var service:WebService = new WebService();
  public function MXWebService()  {   
   service.wsdl = "http://localhost:61490/webService/WebService.asmx?wsdl";
   service.addEventListener(LoadEvent.LOAD, serviceLoadHandler);
   service.loadWSDL();
   
   //getArray();
   //getObject();   
   setObject(  JSON.encode( { name:"milkmidi", age:"30" } ) );
   
   // 使用 
   // service.要呼叫的方法.send( 參數1, 參數2 );
  }  
  
  private function getArray():void {
   service.getArray.addEventListener(ResultEvent.RESULT, resultHandler);
   service.getArray.addEventListener(FaultEvent.FAULT, faultHandler);
   service.getArray.send();
  }
  private function getObject():void {
   service.getObject.addEventListener(ResultEvent.RESULT, resultHandler);
   service.getObject.addEventListener(FaultEvent.FAULT, faultHandler);
   service.getObject.send();
  }
  private function setObject(json:String):void {
   service.setObject.addEventListener(ResultEvent.RESULT, resultHandler);
   service.setObject.addEventListener(FaultEvent.FAULT, faultHandler);
   service.setObject.send(json);
  }
  
  private function faultHandler(e:FaultEvent):void {
   trace(e);
  }
  
  private function resultHandler(e:ResultEvent):void {
   trace(e);
   trace(ObjectUtil.toString(e.result));
  }
  
  private function serviceLoadHandler(e:LoadEvent):void {
   trace(e);
  }  
  
 }
}
&lt;/pre&gt;
Android 端

&lt;br /&gt;
參考了這二篇的教學&lt;br /&gt;
&lt;a href="http://composedcrap.blogspot.com/2009/08/connecting-to-net-web-service-from.html"&gt;http://composedcrap.blogspot.com/2009/08/connecting-to-net-web-service-from.html&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.yam.com/wewa85/article/32877801"&gt;http://blog.yam.com/wewa85/article/32877801&lt;/a&gt;&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public class SampleCallWebService extends Activity {
 
 // ASP.NET 端, 宣告的 Namespace
 private static final String NAMESPACE = "http://milkmidi.com/";
 
 //　asmx 路徑
 private static final String URL = "http://localhost:61490/webService/WebService.asmx";

 //要呼叫的方法
 private static final String MemberLogin_SOAP_ACTION = NAMESPACE+"setObject";
 private static final String METHOD_NAME2 = "setObject";

 private Button mBtn;
 private TextView mMsgTxt;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mBtn = (Button) findViewById(R.id.btn);  
  mMsgTxt = (TextView) findViewById(R.id.btn);
 
  mBtn.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v) {
    try {
     mMsgTxt.setText( doSetObject() );
    } catch (JSONException e) {
     e.printStackTrace();
    }
   }

  });
 }
 public String doSetObject() throws JSONException {
  Log.i("[WebService]", "doSetObject");
  String rs = "";
  
  SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME2);
  JSONObject json = new JSONObject();
  json.put("name", "milkmidi");
  json.put("age", "30");
  request.addProperty("json", json.toString());  

  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
    SoapEnvelope.VER11);
  envelope.dotNet = true;
  envelope.setOutputSoapObject(request);
  HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);  
  try {
   androidHttpTransport.call(MemberLogin_SOAP_ACTION, envelope);  
   SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
   rs = result.toString();
  } catch (Exception e) {
   mMsgTxt.setText(e.toString());
  }
  
  JSONObject rsJson = new JSONObject(rs);  
  return rsJson.getString("name")+","+rsJson.getString("age");

 }
}
&lt;/pre&gt;
&lt;br /&gt;
轉載請註明出處&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-4708655732839824022?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/weEhBnONqDZwPY3lvOsei842g74/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/weEhBnONqDZwPY3lvOsei842g74/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/weEhBnONqDZwPY3lvOsei842g74/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/weEhBnONqDZwPY3lvOsei842g74/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/g3SZfFwjYzg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/4708655732839824022/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=4708655732839824022" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/4708655732839824022?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/4708655732839824022?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/g3SZfFwjYzg/flash-android-aspnet-webservice.html" title="Flash, Android 呼叫 ASP.NET WebService" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/flash-android-aspnet-webservice.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcARX06fSp7ImA9WhRREEw.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-5390902931020585366</id><published>2011-11-23T10:51:00.001+08:00</published><updated>2011-11-23T10:57:24.315+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T10:57:24.315+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><title>html5 easel 3D Ball</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
今天來分享關於 html5 的技術&lt;br /&gt;
試寫一個簡單的 3D Ball 效果&lt;br /&gt;
使用的 html5 Framework, 是 gskinner 大神所開發的 &lt;a href="http://easeljs.com/" target="_blank"&gt;easeljs&lt;/a&gt;&lt;br /&gt;
為什麼要選這套呢，因為是 gskinner 開發, 就一定是好東西&lt;br /&gt;
還有一點是他長的很像 AS3 的寫法, 真的超像的&lt;br /&gt;
對 Flash Developer 來說，真的不難，&lt;br /&gt;

&lt;a target="_blank" href="http://www.milkmidi.com/demo/20111123_html5_3dball/ball3d.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://1.bp.blogspot.com/-j5LPDDnwtt0/Tsxgw-P0U-I/AAAAAAAABBs/CKOi8PllZZE/s320/2011-11-23_105543.jpg" width="320" /&gt;&lt;/a&gt;
&lt;br /&gt;

轉載請註明出處&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-5390902931020585366?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DLS6oi9WET_SUd6WAUrL15LwLbc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DLS6oi9WET_SUd6WAUrL15LwLbc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DLS6oi9WET_SUd6WAUrL15LwLbc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DLS6oi9WET_SUd6WAUrL15LwLbc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/b6SDP67r2k4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/5390902931020585366/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=5390902931020585366" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5390902931020585366?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5390902931020585366?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/b6SDP67r2k4/html5-easel-3d-ball.html" title="html5 easel 3D Ball" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-j5LPDDnwtt0/Tsxgw-P0U-I/AAAAAAAABBs/CKOi8PllZZE/s72-c/2011-11-23_105543.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/html5-easel-3d-ball.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4DQ3k8cSp7ImA9WhRSGUs.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-6170906307845075218</id><published>2011-11-22T19:51:00.001+08:00</published><updated>2011-11-22T19:56:12.779+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T19:56:12.779+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Java String split</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
在開發程式時，經常會需要用到把一整個字串依某字位拆成一個 Array&lt;br /&gt;
在 Java &amp;nbsp;裡 可以使用 String 裡的 split 方法&lt;br /&gt;
和 FlashActionScript 用法是一樣的&lt;br /&gt;
但有一點點不同之處，&lt;br /&gt;
如果你想要 split 的字元是 "." ，就要寫成 "\\."&lt;br /&gt;
不然永遠得到的 Array 長度都是 0&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real.How.To";
    // bad
    System.out.println(java.util.Arrays.toString(
        testString.split(".")
    ));
    // output : []

    // good
    System.out.println(java.util.Arrays.toString(
      testString.split("\\.")
    ));
    // output : [Real, How, To]
  }
}&lt;/pre&gt;

參考文章：&lt;a target="_blank" href="http://www.rgagnon.com/javadetails/java-0438.html"&gt;http://www.rgagnon.com/javadetails/java-0438.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-6170906307845075218?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EAz9Q8WGkyB6BZXT5-FlI36OGUs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EAz9Q8WGkyB6BZXT5-FlI36OGUs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EAz9Q8WGkyB6BZXT5-FlI36OGUs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EAz9Q8WGkyB6BZXT5-FlI36OGUs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/rZ_Is1-69wA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/6170906307845075218/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=6170906307845075218" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6170906307845075218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6170906307845075218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/rZ_Is1-69wA/java-string-split.html" title="Java String split" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/java-string-split.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4HRX87eip7ImA9WhRSGU8.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-540797700456980580</id><published>2011-11-22T10:19:00.001+08:00</published><updated>2011-11-22T10:28:54.102+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T10:28:54.102+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Bluestacks 讓 PC 也可以安裝 Android 系統</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
想在 PC 上, 安裝 Android 系統, 之前需要用 VM 的方式來安裝，&lt;br /&gt;
現在有更好的選擇了：BlueStacks&lt;br /&gt;
&lt;a href="http://bluestacks.com/"&gt;http://bluestacks.com&lt;/a&gt;&lt;br /&gt;
先到官網下載安裝程式，然後下一步下一步，下一步即可&lt;br /&gt;
完成後, 啟動應用程式&lt;br /&gt;
&lt;img border="0" src="http://2.bp.blogspot.com/-DJ5ZDUoov80/TssHHSalKvI/AAAAAAAABBM/LN5S7IZ93oU/s1600/2011-11-22_102102.jpg" /&gt;
&lt;br /&gt;
&lt;br /&gt;
啟動畫面&lt;br /&gt;
&lt;img border="0" height="198" src="http://4.bp.blogspot.com/-zFAN9jnPkrE/TssH7dVn0ZI/AAAAAAAABBU/GWfU2IvpDxA/s320/2011-11-22_102158.jpg" width="320" /&gt;
&lt;br /&gt;
&lt;br /&gt;
工具列左到右為：&lt;br /&gt;
Menu ,&lt;br /&gt;
水平、垂直切換,&lt;br /&gt;
放大至Screen的大小,&lt;br /&gt;
app項單&lt;br /&gt;
&lt;img border="0" height="315" src="http://3.bp.blogspot.com/-8s1dz1MR7qk/TssH711Y5cI/AAAAAAAABBY/hCSAyZV98J8/s320/2011-11-22_102219.jpg" width="320" /&gt;
如何安裝其他的應用程式呢?&lt;br /&gt;
首先你要先下載 Android 的安裝程式檔, 副檔名為 .apk&lt;br /&gt;
找到路徑&lt;br /&gt;
C:\Program Files\BlueStacks\&lt;br /&gt;
有個名為&amp;nbsp;HD-ApkHandler.exe&lt;br /&gt;
把你的 apk 檔拉過去，就會開始安裝了&lt;br /&gt;
&lt;img border="0" height="228" src="http://2.bp.blogspot.com/-tZd_xRvxpiU/TssH8G4TYnI/AAAAAAAABBk/dLdlfynixpE/s320/2011-11-22_102412.jpg" width="320" /&gt;
&lt;br /&gt;
轉載請註明出處&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-540797700456980580?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AoZHp3lB7jkEiZ0cTc2gPEbwzhc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AoZHp3lB7jkEiZ0cTc2gPEbwzhc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AoZHp3lB7jkEiZ0cTc2gPEbwzhc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AoZHp3lB7jkEiZ0cTc2gPEbwzhc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/Wsf7YU1wxak" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/540797700456980580/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=540797700456980580" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/540797700456980580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/540797700456980580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/Wsf7YU1wxak/bluestacks-pc-android.html" title="Bluestacks 讓 PC 也可以安裝 Android 系統" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-DJ5ZDUoov80/TssHHSalKvI/AAAAAAAABBM/LN5S7IZ93oU/s72-c/2011-11-22_102102.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/bluestacks-pc-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UNRng4cCp7ImA9WhRSFU0.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-5599343959620862740</id><published>2011-11-17T11:40:00.001+08:00</published><updated>2011-11-17T11:41:37.638+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-17T11:41:37.638+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FLASHAS3" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash10" /><title>簡易版 3D Banner 效果</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
最近學生問起了一個 3D 的 Banner 效果要如何製作&lt;br /&gt;
寫了一個簡單的 Demo, 程式碼也很短，&lt;br /&gt;
只用到 TweenMax , 和 FlashPlayer10 的 3D 即可做到&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;/*
milkmidi.blogspot.com
*/
import com.greensock.TweenMax;
var container:Sprite = new Sprite();
container.x = stage.stageWidth &amp;gt;&amp;gt; 1;
addChild( container );
addEventListener(Event.ENTER_FRAME , enterFrameHandler);


var back:MovieClip = new Back_mc;
back.x = stage.stageWidth &amp;gt;&amp;gt;1;
back.y = 40;
back.visible=false;

addChild( back );

back.addEventListener(MouseEvent.CLICK , function(){
 showBack(false);
});               

(function () {
 for(var i:int = 0 ; i&amp;lt;6 ; i++){
  var _mc:MovieClip = new Item_mc;
  _mc.width = 100;
  _mc.scaleY = _mc.scaleX;
  _mc.x = 110*i - (110*3);
  _mc.y = 40;
  _mc.addEventListener(MouseEvent.ROLL_OVER , itemOverOutHandler);
  _mc.addEventListener(MouseEvent.ROLL_OUT , itemOverOutHandler);
  _mc.addEventListener(MouseEvent.CLICK , itemOverOutHandler);
  _mc.gotoAndStop(i+1);
  container.addChild( _mc );
 }
 function itemOverOutHandler (e:Event) :void{
  switch(e.type){
   case MouseEvent.ROLL_OVER:
    TweenMax.to( e.currentTarget , .5 , {z:-50});
    container.addChild( e.currentTarget as Sprite);
    break;
   case MouseEvent.ROLL_OUT:
    TweenMax.to( e.currentTarget , .5 , {z:0});
    break;
   case MouseEvent.CLICK:
    showBack(true);
    break;
  }
 }

})();

function showBack (pShow:Boolean):void { 
 var _targetV:int = pShow ? 180 : 0;
 var _update:Function;
 var _onComplete:Function;
 if(pShow){
  removeEventListener(Event.ENTER_FRAME , enterFrameHandler);
  _update = function  () {
   if(  container.rotationY &amp;gt; 90 ){
    container.visible = false;
    back.visible = true;
   }
  }
 }else{
  _update = function  () {
   if(  container.rotationY &amp;lt; 90 ){
    container.visible = true;
    back.visible = false;
   }
  }
  _onComplete = function  () {
   addEventListener(Event.ENTER_FRAME , enterFrameHandler);
  }

 }
 TweenMax.to( container , .7 , {
    rotationY:_targetV,
    onUpdate:_update,
    onComplete:_onComplete
    });
 TweenMax.to( back , .7 , { rotationY:_targetV });
}

function enterFrameHandler (e:Event):void {
 var _value:Number = stage.stageWidth*.5 - mouseX;
 _value *= 0.05;
 container.rotationY += (_value - container.rotationY)/10;
}

&lt;/pre&gt;

&lt;a target="_blank" href="http://dl.dropbox.com/u/2069696/blog/2011_08_07_3DFlow/index.html"&gt;&lt;img border="0" height="116" src="http://1.bp.blogspot.com/-ArhylaMHRLk/TsSBqDOsAMI/AAAAAAAABA8/YAJG8-cDcm8/s320/2011-11-17_113744.jpg" width="320" /&gt;&lt;/a&gt;
&lt;/br&gt;
&lt;a target="_blank" href="http://dl.dropbox.com/u/2069696/blog/2011_08_07_3DFlow/2011_08_07_3DFlow.zip"&gt;
SourceCodeDownload&lt;/a&gt;

&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-5599343959620862740?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v5j7CzGZIhLL3YOW2mlB0UgzpRc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v5j7CzGZIhLL3YOW2mlB0UgzpRc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v5j7CzGZIhLL3YOW2mlB0UgzpRc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v5j7CzGZIhLL3YOW2mlB0UgzpRc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/3SFHjQxssL0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/5599343959620862740/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=5599343959620862740" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5599343959620862740?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5599343959620862740?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/3SFHjQxssL0/3d-banner-demo-tweenmax-flashplayer10.html" title="簡易版 3D Banner 效果" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ArhylaMHRLk/TsSBqDOsAMI/AAAAAAAABA8/YAJG8-cDcm8/s72-c/2011-11-17_113744.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/3d-banner-demo-tweenmax-flashplayer10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUNQH44fyp7ImA9WhRSEE0.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-5086983629266953341</id><published>2011-11-11T11:08:00.001+08:00</published><updated>2011-11-11T17:21:31.037+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T17:21:31.037+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FLASHAS3" /><title>Flash is Dead?</title><content type="html">&lt;div id="fullpost"&gt;
最近 Adobe 公佈了一項重要訊息&lt;br /&gt;
將不再更新行動裝置上的 Flash Player Plugin&lt;br /&gt;
所以 Flash 以死, 我將失業(誤)&lt;br /&gt;
其實也沒那麼嚴重, 只是將重心放在 Apps for Mobile.&lt;br /&gt;
其實我覺得在手機、或是平版上, 看用 flash 製作的 PC 版網站, 本來就是一件奇怪的事&lt;br /&gt;
因為在設計理念上時, 就已經不一樣, 硬體規格也不同&lt;br /&gt;
當初 Jobs 不讓水果版支援 Flash , 這點我也認同, 必竟本來就是二個不同的東西&lt;br /&gt;
Flash 失去了跨平台的優勢, 那下一步呢? 還要不要學 Flash ?&lt;br /&gt;
來說說我自已的觀點。&lt;br /&gt;
&lt;br /&gt;
把市場切割成桌機(PC , Mac)、行動裝置(IOS, Android)二者&lt;br /&gt;
桌機：&lt;br /&gt;
以前 Flash 只能單靠 CPU 運算，現在多了硬體加速的支援, 能做到的效果屌太多了&lt;br /&gt;
Flash 有個最強大的優勢，就是快速製作 Content 的好工具, 程式也好寫,&lt;br /&gt;
在製作 Web 網站時, 還是第一首選。&lt;br /&gt;
現在許多的互動裝置, 都可以和 flash 溝通, 在呈現面上, Flash 的優勢還是最好。&lt;br /&gt;
(你可以用 Java , C# 去跑動畫試試看, 就知道 Flash 太簡單了)&lt;br /&gt;
&lt;br /&gt;
行動裝置：&lt;br /&gt;
因為硬體的關系，不可能跑到像桌機上那麼復雜的效果，&lt;br /&gt;
就算今天水果支援了 Flash , 在使用者操作的考量上, &lt;span class="Apple-style-span" style="color: red;"&gt;還是要做二個版本&lt;/span&gt;&lt;br /&gt;
Html5 就變成了唯一的選擇, 好在你會寫 AS3, Html5 的程式對你不會太難,&lt;br /&gt;
難在的是不同瀏覽器對 Html5 的支援度完全不同&lt;br /&gt;
&lt;br /&gt;
---------------------我是分隔線之大家好，我是奶綠茶---------------------------&lt;br /&gt;
&lt;br /&gt;
為了要讓二者平台都能看, 又想省錢不想做二個版本(最好能包山包海通通包)&lt;br /&gt;
就選 Html5 版就好了呀!&lt;br /&gt;
錯, 因為 IE8 以下不支援 Html5 , IE9又限定 WIN7 才能裝, 裝了後, 也不是完整的支援 Html5&lt;br /&gt;
且且且且且且且且， W3C 都還沒統一規格,&lt;br /&gt;
光針對瀏覽器, 就可以寫死你&lt;br /&gt;
還是回到一開始說的, &lt;span class="Apple-style-span" style="color: red;"&gt;還是要做二個版本&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
Adobe 將把重心放在 Apps for Mobile. 指的就是跨平台技術 AIR.&lt;br /&gt;
用 AIR 寫的 app. 本質還是 flash, 所以還是會受到 flash 先天的限制&lt;br /&gt;
但快速, 好寫, 跨平台依然還是他的優勢, 如果你今天要製作的內容&lt;br /&gt;
不是什麼太復雜的 Game, 用 AIR 來寫 app. 還是超快的啦&lt;br /&gt;
但還是要學學 Android 或 IOS 的平台程式比較快&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
Flash 未來會不會死掉, 不敢把話說死, 但確定的是, 走上程式設計這條路&lt;br /&gt;
註定學不完新技術, 因為汰換的速度太快&lt;br /&gt;
今天不比昨天進步, 明天就比今天難過, 後天就回家吃自已。&lt;br /&gt;
各位程式肝苦人, 一起加油吧。&lt;br /&gt;
&lt;br /&gt;
轉貼文章請註明出處&lt;br /&gt;
&lt;br /&gt;
相關文章&lt;br /&gt;
&lt;a href="http://www.leebrimelow.com/?p=3151"&gt;http://www.leebrimelow.com/?p=3151&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html"&gt;http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-5086983629266953341?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iRdo7lCqAgrkqwKlu7cPsfqXRaE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iRdo7lCqAgrkqwKlu7cPsfqXRaE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iRdo7lCqAgrkqwKlu7cPsfqXRaE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iRdo7lCqAgrkqwKlu7cPsfqXRaE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/H9qPjlGtAF4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/5086983629266953341/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=5086983629266953341" title="5 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5086983629266953341?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5086983629266953341?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/H9qPjlGtAF4/flash-is-dead.html" title="Flash is Dead?" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/flash-is-dead.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYFSXc8eip7ImA9WhRTEkw.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-4521247852514377406</id><published>2011-11-02T12:54:00.002+08:00</published><updated>2011-11-02T14:58:38.972+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T14:58:38.972+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="away3d" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash11" /><title>Away3D4 stage3D Coverflow</title><content type="html">&lt;div id="fullpost"&gt;
大家好，我是奶綠茶&lt;br /&gt;
今天來分享一下如何使用 Away3D4 製作經典的 Coverflow 效果&lt;br /&gt;
之前都是習慣用 PV3D 製作，但 PV3D 沒有推出 Stage3D 的版本，只好轉戰 Away3D&lt;br /&gt;
還好之前有玩過，寫起來長的差不多。&lt;br /&gt;
原理和之前分享過的幾篇 Coverflow 教學一樣&lt;br /&gt;
同時也練習了一下 Robotlegs , Demo如下。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dl.dropbox.com/u/2069696/blog/2011_11_02_away3d4_coverflow/index.html" target="_blank"&gt;&lt;img border="0" height="163" src="http://dl.dropbox.com/u/2069696/blog/2011_11_02_away3d4_coverflow/snapshot.jpg" width="320" /&gt;&lt;/a&gt;
&lt;br /&gt;
轉載請註明出處 
&lt;br /&gt;
&lt;a href="http://dl.dropbox.com/u/2069696/blog/2011_11_02_away3d4_coverflow/source.zip"&gt;SourceCodeDownload&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
其中 ScrollBar 類別是使用 clockmaker 這篇的教學&lt;br /&gt;
&lt;a href="http://clockmaker.jp/blog/2011/10/stage3d-cover-flow/" target="_blank"&gt;http://clockmaker.jp/blog/2011/10/stage3d-cover-flow/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-4521247852514377406?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Tg3SpnmU12JABhavZyvkkXq-6ms/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tg3SpnmU12JABhavZyvkkXq-6ms/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Tg3SpnmU12JABhavZyvkkXq-6ms/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tg3SpnmU12JABhavZyvkkXq-6ms/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/f9CkqUu8HEI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/4521247852514377406/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=4521247852514377406" title="2 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/4521247852514377406?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/4521247852514377406?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/f9CkqUu8HEI/away3d4-stage3d-coverflow.html" title="Away3D4 stage3D Coverflow" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/11/away3d4-stage3d-coverflow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8CSHw5cCp7ImA9WhdaGE0.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-6427056523504682403</id><published>2011-10-28T20:27:00.000+08:00</published><updated>2011-10-28T20:27:49.228+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T20:27:49.228+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIR" /><category scheme="http://www.blogger.com/atom/ns#" term="FLASHAS3" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Adobe AIR ServerSocket</title><content type="html">&lt;div id="fullpost"&gt;
大家好，我是奶綠茶&lt;br /&gt;
今天來介紹一下 Adobe AIR ServerSocket&lt;br /&gt;
需求：&lt;br /&gt;
很多台電腦，在同一個區網，要能彼此溝通，同時 Android 平版也要能傳接值。&lt;br /&gt;
解：&lt;br /&gt;
本來想如果就只有單 flash 的話, 可以使用 P2P 區網連線就決解了，&lt;br /&gt;
但因為 Andriod 平版也要能支援, 所以就改成 Socket 來溝通。&lt;br /&gt;
&lt;br /&gt;
那為什麼不用 Java 架 Socket Server 就好了，因為我是閃客(因為用 Java 做動畫會死人)&lt;br /&gt;
AIR 端，使用ServerSocket 類別。&lt;br /&gt;
在畫面上就只放所有連線的 Client 列表，一個發送訊息的文字和Button, 一個接收的文字&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx"
        creationComplete="createComplete(event);"
        close="appCloseHandler()"&amp;gt;
 
 &amp;lt;fx:Declarations&amp;gt;
  &amp;lt;!-- Place non-visual elements (e.g., services, value objects) here --&amp;gt;
 &amp;lt;/fx:Declarations&amp;gt;
 
 &amp;lt;fx:Script&amp;gt;
  &amp;lt;![CDATA[
  import flash.display.NativeWindow;
  import flash.events.Event;
  import flash.events.ProgressEvent;
  import flash.events.ServerSocketConnectEvent;
  import flash.net.ServerSocket;
  import flash.net.Socket;
  import flash.utils.ByteArray;
  import mx.collections.ArrayCollection;
  import mx.controls.Alert;
  import mx.events.FlexEvent;
  
  
  private var server :ServerSocket = new ServerSocket();
  
  [Bindable]
  private var serverActivity:Boolean = false;
  
  [Bindable]
  private var clientSockets:ArrayCollection = new ArrayCollection();
  
  //private var ipAddress  :String = "192.168.253.176";
  private var ipAddress  :String = "127.0.0.1";
  private var ipAddressPort :int = 9527;
  
  private function createComplete(e:FlexEvent):void {   
   
   try {
    server.bind(ipAddressPort, ipAddress);
    log( "bind:" + ipAddress+":"+ipAddressPort );
    server.addEventListener(ServerSocketConnectEvent.CONNECT , clientConnectedHandler);   
    server.listen();
    serverActivity = true;
   }catch (err:Error){
    log( err + "" );
    serverActivity = false;
    Alert.show(err.message);    
   }   
  }
  
  private function clientConnectedHandler(e:ServerSocketConnectEvent):void {
   //每當有新的 Client 連該進來, 就會觸發該函式。
   var clientSocket:Socket = e.socket;
   log( clientSocket.localAddress + ":" + clientSocket.localPort );
   clientSockets.addItem( clientSocket );
   clientSocket.addEventListener(Event.CLOSE , clientDisconnectedHandler);
   //偵聽當 Client 離線時。
   clientSocket.addEventListener(ProgressEvent.SOCKET_DATA, onClientSocketData );
   //偵聽 Client 發出的訊息
  }
  
  private function onClientSocketData(e:ProgressEvent):void {
   // 讀取 Client 發出的訊息
   var buffer:ByteArray = new ByteArray();
   var clientSocket:Socket = e.currentTarget as Socket;
            clientSocket.readBytes( buffer, 0, clientSocket.bytesAvailable );
            log( "Received: " + buffer.toString() );   
  }
  
  private function clientDisconnectedHandler(e:Event):void {
   // 當 Client 離線時。
   e.currentTarget.removeEventListener( e.type , arguments.callee );
   clientSockets.removeItemAt( clientSockets.getItemIndex(e.target));
  }
  private function log(o:Object):void {
   textArea.text += o +"\n";
  }
  
  private function writeDataToSockets(e:Event):void {
   var msg:String = textInput.text;
   if (msg == "") {
    return;
   }   
   trace( "ServerSocketMain.writeDataToSockets ");
   // 對所有的 Client 發出訊息。
   for each (var socket:Socket in clientSockets) {
    if (socket.connected) {     
     try {
      socket.writeUTF(msg);
      socket.flush();
     }catch (err:Error){
      log(err);
     }     
    }
   }
  }
  private function appCloseHandler():void {  
   server.close();
   server = null;   
  } 
  
  
  ]]&amp;gt;
 &amp;lt;/fx:Script&amp;gt;
 &amp;lt;s:HGroup width="100%" height="100%" paddingLeft="5"&amp;gt;
  &amp;lt;s:List width="200" height="100%" dataProvider="{clientSockets}" labelField="localAddress"&amp;gt;&amp;lt;/s:List&amp;gt;
  
  &amp;lt;s:VGroup width="100%" height="100%"&amp;gt;
   &amp;lt;s:HGroup width="600"&amp;gt;
    &amp;lt;s:TextInput id="textInput" width="200" text="server send info to all client" /&amp;gt;
    &amp;lt;s:Button x="130" y="10" label="Send" 
     click="writeDataToSockets(event)" 
     enabled="{textInput.text.length&amp;gt;0}" visible="{clientSockets.length&amp;gt;0}" /&amp;gt;
   &amp;lt;/s:HGroup&amp;gt; 
   &amp;lt;s:Button label="clear" click="{textArea.text=''}" enabled="{serverActivity}"/&amp;gt;
   &amp;lt;s:TextArea id="textArea" width="200" height="100%" editable="false" /&amp;gt;
  &amp;lt;/s:VGroup&amp;gt;
 &amp;lt;/s:HGroup&amp;gt; 
&amp;lt;/s:WindowedApplication&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
在用 flash 寫一個 Client 端測試：&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/halo"
      creationComplete="createSocket(event)"&amp;gt;
 &amp;lt;s:layout&amp;gt;
  &amp;lt;s:VerticalLayout /&amp;gt;
 &amp;lt;/s:layout&amp;gt;
 &amp;lt;fx:Script&amp;gt;
  &amp;lt;![CDATA[
   import flash.events.Event;
   import flash.events.ProgressEvent;
   import flash.net.Socket;
   import mx.events.FlexEvent;
          
   protected var socket:Socket;
   
   private var ipAddress  :String = "127.0.0.1";
   private var ipAddressPort :int = 9527;
   
   protected function createSocket(event:FlexEvent):void {    
    socket = new Socket();
    socket.addEventListener(Event.CONNECT,socketConnected);
    socket.addEventListener(ProgressEvent.SOCKET_DATA, socketData);      
    socket.connect( ipAddress, ipAddressPort );    
   }   
   protected function socketConnected(e:Event):void{
    log("client - socket connected");
   }   
   protected function socketData(e:ProgressEvent):void{
    trace("client - socket data");
    //trace(socket.readUTF());    
    log(socket.readUTF());    
   }   
   private function callServerClickHandler():void {
    try {
     socket.writeUTF("callServer");
     socket.flush();
    }catch (err:Error){
     log(err);
    }
    
   }
   private function log(o:Object):void {
    textArea.text += o + "\n";
   }
   
  ]]&amp;gt;
 &amp;lt;/fx:Script&amp;gt;
 &amp;lt;s:Button label="call Server" click="callServerClickHandler()" /&amp;gt;
 &amp;lt;s:TextArea id="textArea"&amp;gt;&amp;lt;/s:TextArea&amp;gt;
&amp;lt;/s:Application&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Java/Android 端&lt;br /&gt;
使用&amp;nbsp;Socket 類別&lt;br /&gt;
因為程式碼落落長，&lt;br /&gt;
有需要的朋友就直接下載 Android 端的程式碼，在這就不貼出來了&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dl.dropbox.com/u/2069696/blog/2011_10_28_socket/2011_10_28_ServerSocketDemo_AIR.zip" target="_blank"&gt;AIR&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://dl.dropbox.com/u/2069696/blog/2011_10_28_socket/2011_10_28_ServerSocketDemo_Java.zip" target="_blank"&gt;Java/Android&lt;/a&gt;
&lt;br /&gt;
轉載請註明出處 
&lt;br /&gt;

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-6427056523504682403?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rsk93D0KGQC7o1R7g9rYtKBTa9Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rsk93D0KGQC7o1R7g9rYtKBTa9Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rsk93D0KGQC7o1R7g9rYtKBTa9Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rsk93D0KGQC7o1R7g9rYtKBTa9Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/lZXZ6krr9UU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/6427056523504682403/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=6427056523504682403" title="6 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6427056523504682403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6427056523504682403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/lZXZ6krr9UU/adobe-air-serversocket.html" title="Adobe AIR ServerSocket" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/10/adobe-air-serversocket.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEGR3s_eyp7ImA9WhdaGE0.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-6067997805826460212</id><published>2011-10-28T19:49:00.001+08:00</published><updated>2011-10-28T19:50:26.543+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T19:50:26.543+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FLASHAS3" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Flash in Android WebView</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
在 Android 裡可以使用 WbeView 來包一個 flash 的網頁&lt;br /&gt;
但在 3.0 以上的版本要再多加一些設定，才能讓 flash 順利出現。&lt;br /&gt;
在 AndroidManifest.xml 加入這二段即可&lt;br /&gt;
uses-sdk android:minSdkVersion="11"&lt;br /&gt;
application  android:hardwareAccelerated="true"&lt;br /&gt;
完成&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-6067997805826460212?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5cjQ9f-Bku8xIU4V4-k8JbLpduU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5cjQ9f-Bku8xIU4V4-k8JbLpduU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5cjQ9f-Bku8xIU4V4-k8JbLpduU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5cjQ9f-Bku8xIU4V4-k8JbLpduU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/HURVUS-72Mk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/6067997805826460212/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=6067997805826460212" title="6 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6067997805826460212?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6067997805826460212?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/HURVUS-72Mk/flash-in-android-webview.html" title="Flash in Android WebView" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/10/flash-in-android-webview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcARXw8fSp7ImA9WhRTGE4.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-6882287132764280973</id><published>2011-10-28T16:49:00.000+08:00</published><updated>2011-11-09T18:04:04.275+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-09T18:04:04.275+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIR" /><category scheme="http://www.blogger.com/atom/ns#" term="FLASHAS3" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Andoird Launcher AIR App</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
最近案子的需要，所以會用 Android 和 AIR 來混搭開發 app&lt;br /&gt;
遇到的問題有：&lt;br /&gt;
1.Android 怎麼啟動另一個 App(Andoird or AIR) ?&lt;br /&gt;
2.啟動後，如何帶變數過去?&lt;br /&gt;
3.反過來 AIR 啟動 Andoird 且帶值?&amp;nbsp;
&lt;br /&gt;
先了解 Android 怎麼啟動另一個 App.&lt;br /&gt;
使用 Intent 類別, 且指定要啟動的 app package路徑
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;
Intent intent = new Intent( Intent.ACTION_MAIN , null);
intent.addCategory( Intent.CATEGORY_LAUNCHER);
final ComponentName cn = 
new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
startActivity(intent);
&lt;/pre&gt;
如果是要啟動 AIR 的 app.
就要在 package 前加上 air.&lt;br /&gt;
new ComponentName("air.com.android.settings", "air.com.android.settings.fuelgauge.PowerUsageSummary");&amp;nbsp;


&lt;br /&gt;
第二個問題是啟動後，如何帶變數過去?&lt;br /&gt;
只要在 intent 使用 putExtra 即可
intent.putExtra("Key", "Value");&lt;br /&gt;
接收的 Activity 在 onCreate();&lt;br /&gt;
使用 getIntent().getExtras().getString("Key");&lt;br /&gt;
但在 AIR 的部份，無法修改 onCreate ,所以只好找另外的方法。&lt;br /&gt;
好在 Android 的機制裡，可以使用 scheme 的方法呼叫, 像 market:// 這樣，&lt;br /&gt;
當遇到這樣的連結時，只要 app 有在 mainfest 設定 intent-filter 的話，就會啟動該 app.&lt;br /&gt;
在這我們以：testapp:// 為例
Android 端：
&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;Uri uri = Uri.parse("testapp://com.example/milkmidi/tesetdata");
intent = new Intent( Intent.ACTION_VIEW, uri);
&lt;/pre&gt;
AIR 端：在 application.xml 裡加上
＜data android:scheme="testapp" android:host="com.example" /＞
當遇到是 testapp://com.example 這樣的連結時，就可以啟動 AIR 的 app.

&lt;br /&gt;
&lt;pre class="brush: xml;"&gt; ＜android＞
  ＜manifestAdditions＞＜![CDATA[
   
   ＜manifest android:installLocation="auto"＞    
    
    ＜application＞ 
     ＜activity ＞ 
      ＜intent-filter＞
       ＜action android:name="android.intent.action.MAIN"/＞
       ＜category android:name="android.intent.category.LAUNCHER"/＞
      ＜/intent-filter＞
      ＜intent-filter＞
       ＜action android:name="android.intent.action.VIEW"/＞
       ＜category android:name="android.intent.category.BROWSABLE"/＞
       ＜category android:name="android.intent.category.DEFAULT"/＞
       ＜data android:scheme="testapp" android:host="com.example" /＞
      ＜/intent-filter＞
     ＜/activity＞ 
    ＜/application＞     
   
   ＜/manifest＞
   
  ]]＞＜/manifestAdditions＞
 ＜/android＞



&lt;/pre&gt;
得到變數可以使用：
&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;NativeApplication.nativeApplication.addEventListener(
     InvokeEvent.INVOKE, onInvoke);
private function onInvoke(e:InvokeEvent):void {
   log( "onInvoke:" + e.arguments );
  }
&lt;/pre&gt;
完成&lt;br /&gt;
轉載請註明出處 

&lt;br /&gt;
參考文章：&lt;br /&gt;
&lt;a href="http://www.riaspace.com/2011/08/defining-custom-url-schemes-for-your-air-mobile-applications"&gt;http://www.riaspace.com/2011/08/defining-custom-url-schemes-for-your-air-mobile-applications&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/5591086/passing-parameters-from-a-java-activity-to-adobe-air-app"&gt;http://stackoverflow.com/questions/5591086/passing-parameters-from-a-java-activity-to-adobe-air-app&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.slideshare.net/CodeAndroid/android-intent-intent-filter-broadcast-receivers"&gt;http://www.slideshare.net/CodeAndroid/android-intent-intent-filter-broadcast-receivers&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-6882287132764280973?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HaIA7fBQygFsy1IT3Lvngp9Uokc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HaIA7fBQygFsy1IT3Lvngp9Uokc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HaIA7fBQygFsy1IT3Lvngp9Uokc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HaIA7fBQygFsy1IT3Lvngp9Uokc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/y0mhHd3Du6Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/6882287132764280973/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=6882287132764280973" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6882287132764280973?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6882287132764280973?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/y0mhHd3Du6Y/andoird-launcher-air-app.html" title="Andoird Launcher AIR App" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/10/andoird-launcher-air-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFSHo5fCp7ImA9WhdaFkQ.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-1354902165137537370</id><published>2011-10-27T14:41:00.001+08:00</published><updated>2011-10-27T14:41:59.424+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-27T14:41:59.424+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android killProcess</title><content type="html">大家好，我是奶綠茶
在開發 Android App 時，如果想要關掉 app 時
只要一直按 Back 鍵，就會離開應用程式。
但其實 Android 只是把他放到常註程式裡，並沒有成正的關掉
這時可以在主 Activity 的 onDestroy裡加上
&lt;pre class="brush: java;"&gt;
@Override
protected void onDestroy() {
 super.onDestroy();
 android.os.Process.killProcess(android.os.Process.myPid());
}
&lt;/pre&gt;
就可以完整的移掉&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-1354902165137537370?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GNqsz3DQYUIS75nETOOP9LuitPo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GNqsz3DQYUIS75nETOOP9LuitPo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GNqsz3DQYUIS75nETOOP9LuitPo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GNqsz3DQYUIS75nETOOP9LuitPo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/1Aja-Cwx3cU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/1354902165137537370/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=1354902165137537370" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1354902165137537370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1354902165137537370?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/1Aja-Cwx3cU/android-killprocess.html" title="Android killProcess" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/10/android-killprocess.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IGRH88fSp7ImA9WhdaEko.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-3375488993535935437</id><published>2011-10-22T21:02:00.000+08:00</published><updated>2011-10-22T18:32:05.175+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-22T18:32:05.175+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>WP7Contact Android App</title><content type="html">奶小茶我第一個 Android APP 上架了&lt;br /&gt;
是一個仿 WP7 介面的電話本&lt;br /&gt;
從2010年九月研究 Android 到現在, 總算是有點小心得&lt;br /&gt;
&lt;u&gt;&lt;a href="https://market.android.com/details?id=milkmidi.minicontact"&gt;WP7Contact Lite&lt;/a&gt;&lt;/u&gt;&lt;br /&gt;
&lt;a href="https://market.android.com/details?id=milkmidi.minicontact"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-YlLvyZa0D1M/TqKae5uw37I/AAAAAAAABAM/mP2i2xzIi3U/s1600/wp7contact_icon_512x512.jpg" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
1.1.94&lt;br /&gt;
字母選擇列表&lt;br /&gt;
&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-1jhol5QplIk/TqKa6g2lX9I/AAAAAAAABAU/1B7tO0sWf8w/s320/ss-480-1-9.png" width="192" /&gt;
&lt;br /&gt;
&lt;br /&gt;
輔色選擇&lt;br /&gt;
&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-LxH_zomlqEM/TqKa7NBFR5I/AAAAAAAABAc/rpj3mcvF_fo/s320/ss-480-5-9.jpg" width="192" /&gt;
&lt;br /&gt;
&lt;br /&gt;
播號鍵盤&lt;br /&gt;
&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-C219_djQJb8/TqKa7fRic_I/AAAAAAAABAk/lYFBL0cvhWI/s320/ss-480-6-2.png" width="192" /&gt;
&lt;br /&gt;
&lt;br /&gt;
通訊清單&lt;br /&gt;
&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-ZsfYozhuYwo/TqKa7tHR23I/AAAAAAAABAs/EwIi23NEgHQ/s320/ss-480-7-0.jpg" width="192" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-3375488993535935437?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cwUUDQ6Chp-gWrmp8YmZcPFyA8k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cwUUDQ6Chp-gWrmp8YmZcPFyA8k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cwUUDQ6Chp-gWrmp8YmZcPFyA8k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cwUUDQ6Chp-gWrmp8YmZcPFyA8k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/r369AUYOPyQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/3375488993535935437/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=3375488993535935437" title="8 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/3375488993535935437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/3375488993535935437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/r369AUYOPyQ/android-app.html" title="WP7Contact Android App" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-YlLvyZa0D1M/TqKae5uw37I/AAAAAAAABAM/mP2i2xzIi3U/s72-c/wp7contact_icon_512x512.jpg" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/02/android-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQGR3w9eCp7ImA9WhdbE00.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-6838512717856030938</id><published>2011-10-11T11:33:00.004+08:00</published><updated>2011-10-11T11:38:46.260+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T11:38:46.260+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Flash11" /><title>StarlingFramework</title><content type="html">&lt;div id="fullpost"&gt;
Adobe Flash Player11 推出後，最令人開心的是支援 GPU 運算&lt;br /&gt;
可以透過顯卡來幫忙，不在只有以往的 CPU。&lt;br /&gt;
但要自已從無到有的從底層寫，好像有點辛苦&lt;br /&gt;
奶小茶我今天就是要介紹的是一套 2D flash API, 一樣底層是支援 GPU 運算的&lt;br /&gt;
&lt;br /&gt;
StarlingFramework, The GPU powered 2D Flash API&lt;br /&gt;
&lt;a href="http://www.starling-framework.org/" target="_blank"&gt;http://www.starling-framework.org/&lt;/a&gt;&lt;br /&gt;
可以先到官網下載 Source 和 Sample Code.&lt;br /&gt;
編譯時，一定要選擇 Flash Player11 才行&lt;br /&gt;
這套 FrameWork 的好處，就是寫法長的跟本來的差不多&lt;br /&gt;
一樣是叫 Sprite, TextField, Stage,&lt;br /&gt;
一樣可以有 addChild 等方法，學起來不會太難&lt;br /&gt;
看一下試寫的效果，結合 Box2D, 300個Box, 還可以保持在 30FPS 左右&lt;br /&gt;
&lt;a href="http://dl.dropbox.com/u/2069696/blog/2011_10_11_starling/index.html" target="_blank"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-siTRYLCAq60/TpO6IOzbI-I/AAAAAAAABAE/M4ftgKBc6lM/s320/2011-10-11_113736.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-6838512717856030938?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/deqhxaXPMLEcw5YX40_2_WzbG-g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/deqhxaXPMLEcw5YX40_2_WzbG-g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/deqhxaXPMLEcw5YX40_2_WzbG-g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/deqhxaXPMLEcw5YX40_2_WzbG-g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/NdAIdMYzsiU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/6838512717856030938/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=6838512717856030938" title="4 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6838512717856030938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/6838512717856030938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/NdAIdMYzsiU/starlingframework.html" title="StarlingFramework" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-siTRYLCAq60/TpO6IOzbI-I/AAAAAAAABAE/M4ftgKBc6lM/s72-c/2011-10-11_113736.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/10/starlingframework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEGQXY6eSp7ImA9WhdVEks.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-5552702213198322284</id><published>2011-09-17T21:56:00.000+08:00</published><updated>2011-09-17T22:10:20.811+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-17T22:10:20.811+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIR" /><category scheme="http://www.blogger.com/atom/ns#" term="adobe" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>AIR3.0 Native extensions Example Part1</title><content type="html">&lt;div id="fullpost"&gt;
大家好，我是奶綠茶&lt;br /&gt;
Adobe AIR3.0 即將發怖&lt;br /&gt;
其中最酷的新功能就是可以呼叫原生的程式&lt;br /&gt;
在這奶綠茶我就以 Android 來做個 Demo。&lt;br /&gt;
1.呼叫 Android toast&lt;br /&gt;
&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-10OvnPwWpVM/TnSeU0WOaaI/AAAAAAAAA-8/VwVJB8NsD9c/s320/device-2011-09-17-211247.png" width="192" /&gt;
&lt;br /&gt;
2.呼叫 Android AlertDialog&lt;br /&gt;
&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-BaElpeHCFDA/TnSeccaGH-I/AAAAAAAAA_A/G2MsdkG1kcc/s320/device-2011-09-17-211254.png" width="192" /&gt;
&lt;br /&gt;
3.呼叫 Android DatePickerDialog(非同步，並得到所選的日期回傳給 flash)&lt;br /&gt;
&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-P9XEV0ewWFU/TnSecxfvyZI/AAAAAAAAA_E/TWhntoEX06A/s320/device-2011-09-17-211302.png" width="192" /&gt;
&lt;br /&gt;
&lt;br /&gt;
4.List Dialog&lt;br /&gt;
&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-homHUTe78dI/TnSedDLdk0I/AAAAAAAAA_I/ljq3TDa4MC0/s320/device-2011-09-17-211311.png" width="192" /&gt;
&lt;br /&gt;
5.得到 DeviceID&lt;br /&gt;
&lt;br /&gt;
教學Step：&lt;br /&gt;
1.下載 AIR3.0 SDK(目前是&amp;nbsp;RC 1&amp;nbsp;3.0.0.388)&lt;br /&gt;
&lt;a href="http://labs.adobe.com/downloads/air3.html"&gt;http://labs.adobe.com/downloads/air3.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
2.安裝 FlashDevelop4&lt;br /&gt;
3.安裝 Ant (方便下 Command Line, 不裝也可以)&lt;br /&gt;
&lt;a href="http://ant.apache.org/"&gt;http://ant.apache.org/&lt;/a&gt;&lt;br /&gt;
4.安裝 AntPlugin for FD4&lt;br /&gt;
&lt;a href="http://code.google.com/p/fd-ant-plugin/"&gt;http://code.google.com/p/fd-ant-plugin/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
5.FlashAction3&lt;br /&gt;
AIR3.0裡，多出了一個&amp;nbsp;ExtensionContext 類別，用來呼叫原生的程式碼&lt;br /&gt;
var extension:ExtensionContext&amp;nbsp;= ExtensionContext.createExtensionContext("Native ID", null);&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;&lt;br /&gt;
其中Native ID指的是你要呼叫的 id 名稱&lt;br /&gt;
同時要在你的 application.xml 宣告&lt;br /&gt;
&lt;br /&gt;
＜extensions＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;＜extensionID＞milkmidi.air3.demo＜/extensionID＞&lt;br /&gt;
＜/extensions＞&lt;br /&gt;
&lt;br /&gt;
結著就可以使用&lt;br /&gt;
extension.call("funcationName", ...params);&lt;br /&gt;
來呼叫&lt;br /&gt;
如果是同步的話，extendsion 就會直接 return 值&lt;br /&gt;
非同步的話，就使用 addEvetnListener( StatusEvent.STAUS ) 來偵聽&lt;br /&gt;
&lt;br /&gt;
6.Android 端&lt;br /&gt;
使用 Eclipse　開啟新的 Android Project&lt;br /&gt;
將 AIR3.0 SDK 裡的 lib\android\FlashRuntimeExtensions.jar 加到 Complie Path 裡&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public class AIR3Context extends FREContext implements FREExtension{

	private static final String TAG = "[AIR3Context]";
	
	@Override
	public FREContext createContext(String pType) {
		log(pType); //　pType 的值會由 flash 端　ExtensionContext.createExtensionContext("ID" , ”這兒決定”　）;
		return new AIR3Context();
	}
	@Override
	public void initialize() {
		log("initialize()");
	}
	
	@Override
	public Map&lt;string, frefunction=""&gt; getFunctions() {
//注冊 function 名稱。
		HashMap&lt;string, frefunction=""&gt; result = new HashMap&lt;string, frefunction=""&gt;();
		result.put("toast", new ToastFREFunction());
		result.put("alertDialog", new AlertDialogFREFunction());
		result.put("timePickerDialog", new TimePickerDialogFREFunction());
		result.put("devices", new DevicesFREFunction());
		result.put("itemListDialog", new ItemListDialogFREFunction());
	    result.put("googleMap", new GoogleMapFREFunction());
	    return result;
	}
	
	@Override
	public void dispose() {
		log("dispose()");
	}	private void log(Object o){
		Log.i(TAG, o+"");
	}

}
&lt;/string,&gt;&lt;/string,&gt;&lt;/string,&gt;&lt;/pre&gt;
將 Android 裡的 java　檔，打包成 .jar格式&lt;br /&gt;
&lt;br /&gt;
7.Package Native Extensions&lt;br /&gt;
這裡我卡了很久，參考了許多文章和不斷的失敗，才有一些心得&lt;br /&gt;
要先寫一隻和 Native 呼叫用的 class, &amp;nbsp;並將其打包成 swc 格式&lt;br /&gt;
然後將 swc 解壓縮, 取得裡面的二個檔案&lt;br /&gt;
寫一隻 extension.xml 用來說明 Native , 長成這樣&lt;br /&gt;
&lt;br /&gt;
＜extension xmlns="http://ns.adobe.com/air/extension/2.5"＞&lt;br /&gt;
＜id＞milkmidi.air3.demo＜/id＞&lt;br /&gt;
＜versionNumber＞1.0＜/versionNumber＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;＜platforms＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;＜platform name="Android-ARM"＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;＜applicationDeployment＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;＜nativeLibrary＞milkmidi.air3.demo.jar＜/nativeLibrary＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;＜initializer＞milkmidi.air3.demo.AIR3Context＜/initializer＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;				&lt;/span&gt;＜finalizer＞milkmidi.air3.demo.AIR3Context＜/finalizer＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;＜/applicationDeployment＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;＜/platform＞&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;＜/platforms＞&lt;br /&gt;
＜/extension＞&lt;br /&gt;
接著透過 Command line 的方法，將一堆東西打包成 xxx.ane&lt;br /&gt;
還好有善心人事將這一切的動作，包成了 Ant 用的 xml 格式&lt;br /&gt;
你只需要呼叫即可&lt;br /&gt;
原文如下&lt;br /&gt;
&lt;a href="http://blog.aboutme.be/2011/09/12/air-native-extensions-hello-world-example-ant-script/" target="_blank"&gt;http://blog.aboutme.be/2011/09/12/air-native-extensions-hello-world-example-ant-script/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
結論：&lt;br /&gt;
AIR3.0 可以呼叫原生的類別，但前提是”你還是需要自己寫原生的類別來給flash端呼叫”&lt;br /&gt;
想在 iOS 上用的話, 還是要乖乖寫一下 xCode。&lt;br /&gt;
但至少是一大進步, 其待正式版的到來。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/35vsRAVpJzs?hl=zh&amp;amp;fs=1" width="425"&gt;&lt;/iframe&gt;
&lt;br /&gt;
參考文章：&lt;br /&gt;
&lt;a href="http://www.leebrimelow.com/?p=2995" target="_blank"&gt;http://www.leebrimelow.com/?p=2995&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://akabana.info/2011/08/11/air-native-extension-series/" target="_blank"&gt;http://akabana.info/2011/08/11/air-native-extension-series/&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.adobe.com/devnet/air/articles/extending-air.html" target="_blank"&gt;http://www.adobe.com/devnet/air/articles/extending-air.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
轉載請註明出處：&lt;br /&gt;
&lt;a href="http://milkmidi.blogspot.com/2011/09/air30-native-extensions-example-part1.html"&gt;http://milkmidi.blogspot.com/2011/09/air30-native-extensions-example-part1.html&lt;/a&gt;&lt;br /&gt;
&lt;u&gt;&lt;a href="http://www.box.net/shared/89dqa6ilimm05uzadlb1" target="_blank"&gt;AS source code &lt;/a&gt;&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;a href="http://www.box.net/shared/cgc91rogizks95cic04t" target="_blank"&gt;Android source code &lt;/a&gt;&lt;/u&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-5552702213198322284?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fFhHax1tTEA6o2At2uOuPgZGDEQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fFhHax1tTEA6o2At2uOuPgZGDEQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fFhHax1tTEA6o2At2uOuPgZGDEQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fFhHax1tTEA6o2At2uOuPgZGDEQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/kOguAGD_Jw4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/5552702213198322284/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=5552702213198322284" title="6 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5552702213198322284?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5552702213198322284?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/kOguAGD_Jw4/air30-native-extensions-example-part1.html" title="AIR3.0 Native extensions Example Part1" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-10OvnPwWpVM/TnSeU0WOaaI/AAAAAAAAA-8/VwVJB8NsD9c/s72-c/device-2011-09-17-211247.png" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/09/air30-native-extensions-example-part1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EAQ38-cSp7ImA9WhdWGUo.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-1890107121863543083</id><published>2011-09-14T11:40:00.000+08:00</published><updated>2011-09-14T11:40:42.159+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T11:40:42.159+08:00</app:edited><title>Android Custom Title</title><content type="html">&lt;div id="fullpost"&gt;
大家好，我是奶綠茶，&lt;br /&gt;
今天來分享如何客制化 Android 的 Title Bar&lt;br /&gt;
先看預設的樣式&lt;br /&gt;
&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-VvsksRefvhA/TnAfcE9ZYbI/AAAAAAAAA-s/uNXIVmhxMhA/s320/device-2011-09-14-105331.png" width="213" /&gt;
&lt;br /&gt;
&lt;br /&gt;
接著改變 Style, 變成水果風&lt;br /&gt;
&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-df6qFLNeUH4/TnAfr7jnOXI/AAAAAAAAA-w/JMvIhDgTo1U/s320/device-2011-09-14-111724.png" width="213" /&gt;&lt;br /&gt;
先製作 title 的 layout, my_title.xml
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;＜RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"＞

	＜Button
	style="@style/title_bar_button_back"
	android:id="@+id/back_btn"
	android:layout_marginLeft="5dp" 
	android:text="Back"	/＞＜!-- 這裡是 Back 鍵 --＞
	
	＜TextView
	style="@style/title_bar_text"
	android:id="@+id/title_txt"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:gravity="center"
	android:text="Title" /＞
	
＜/RelativeLayout＞
&lt;/pre&gt;
&lt;br /&gt;
style.xml&lt;br /&gt;
&lt;pre class="brush: xml;"&gt; 
＜style name="my_theme" parent="@android:style/Theme.Light"＞
		＜item name="android:windowContentOverlay"＞@null＜/item＞
        ＜item name="android:windowTitleSize"＞40.0dip＜/item＞
        ＜item name="android:windowBackground"＞@drawable/iphone_bg＜/item＞  
        ＜item name="android:windowTitleBackgroundStyle"＞@style/window_title_background_style＜/item＞
        ＜item name="android:buttonStyle"＞@style/buttonStyle＜/item＞
	＜/style＞
	
	＜style name="buttonStyle" parent="@android:style/Widget.Button"＞
		＜item name="android:layout_centerVertical"＞true＜/item＞
    	＜item name="android:layout_width"＞wrap_content＜/item＞        
        ＜item name="android:layout_height"＞wrap_content＜/item＞
        ＜item name="android:minWidth"＞60dp＜/item＞        
 		＜item name="android:textSize"＞16sp＜/item＞
 		＜item name="android:textColor"＞#ffffffff＜/item＞
 		＜item name="android:shadowColor"＞#FF000000＜/item＞
        ＜item name="android:shadowDx"＞0＜/item＞
        ＜item name="android:shadowDy"＞-1＜/item＞
        ＜item name="android:shadowRadius"＞0.2＜/item＞        
		＜item name="android:background"＞@drawable/ui_navigation_bar_default_button＜/item＞
	＜/style＞
	＜style name="title_bar_button_back" parent="@style/buttonStyle"＞
 		＜item name="android:background"＞@drawable/ui_navigation_bar_default_button_back＜/item＞
 	＜/style＞
	
	 ＜style name="window_title_background_style"＞
        ＜item name="android:gravity"＞center_vertical＜/item＞
        ＜item name="android:layout_width"＞fill_parent＜/item＞
        ＜item name="android:layout_height"＞fill_parent＜/item＞
        ＜item name="android:background"＞@drawable/iphone_title_bar_blue＜/item＞
    ＜/style＞
        
    ＜style name="title_bar_text"＞
 		＜item name="android:textColor"＞#ffffff＜/item＞
    	＜item name="android:textSize"＞24sp＜/item＞
    	＜item name="android:shadowColor"＞#FF000000＜/item＞
        ＜item name="android:shadowDx"＞0＜/item＞
        ＜item name="android:shadowDy"＞-1＜/item＞
        ＜item name="android:shadowRadius"＞0.2＜/item＞
 	＜/style＞
&lt;/pre&gt;
然後在 AndroidManifest.xml, 指定 theme
而程式碼的部份，&lt;br /&gt;
寫一個 Abstract 類別方便其他的 Activity 使用
其中要多判斷是否要出現 Back 鍵。

&lt;br /&gt;
&lt;pre class="brush: java;"&gt;private TextView mTitleTextView;
	private Button mBackBtn;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 		
		setContentView( getLayoutId() );	
		getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
		
		
		
		mBackBtn = (Button) findViewById(R.id.back_btn);
		mBackBtn.setOnClickListener(new Button.OnClickListener() {			
			@Override
			public void onClick(View v) {
				finish();				
			}
		});		
		
		Intent intent = getIntent();		
		String action = intent.getAction();
		if(action!=null){
			if (action.equals(Intent.ACTION_MAIN)) {
				mBackBtn.setVisibility(View.INVISIBLE);
			}
		}	
	}
	protected abstract int getLayoutId();
	
	
	

	@Override
	public void setTitle(CharSequence title) {
		if(mTitleTextView==null){
			mTitleTextView = (TextView)findViewById(R.id.title_txt);
		}
		mTitleTextView.setText(title);
	}
 &lt;/pre&gt;
&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-FS-dr8U00aE/TnAhylZw9gI/AAAAAAAAA-0/B2kxywneJVc/s320/device-2011-09-14-112611.png" width="213" /&gt;
&lt;br /&gt;
&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-bvBLaHf8pII/TnAhzBaXdKI/AAAAAAAAA-4/Tl9iCtmiyxE/s320/device-2011-09-14-112623.png" width="213" /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
轉載請註明出處 
&lt;br /&gt;

&lt;a href="http://www.box.net/shared/d852lnfzxhb1d174xmup" target='_blank'&gt;SourceCodeDownload&lt;/a&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-1890107121863543083?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c4u-LvGVASFldXCWNyW9_rxn3Hs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c4u-LvGVASFldXCWNyW9_rxn3Hs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c4u-LvGVASFldXCWNyW9_rxn3Hs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c4u-LvGVASFldXCWNyW9_rxn3Hs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/B96sFd02SPo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/1890107121863543083/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=1890107121863543083" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1890107121863543083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1890107121863543083?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/B96sFd02SPo/android-custom-title.html" title="Android Custom Title" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-VvsksRefvhA/TnAfcE9ZYbI/AAAAAAAAA-s/uNXIVmhxMhA/s72-c/device-2011-09-14-105331.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/09/android-custom-title.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ENSHYzeyp7ImA9WhdWEk8.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-1261403376057853598</id><published>2011-09-05T19:21:00.000+08:00</published><updated>2011-09-05T19:21:39.883+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-05T19:21:39.883+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android Save 圖片至 SD Card</title><content type="html">大家好，我是奶綠茶
&lt;br /&gt;
今天來分享一下如果將 Android 的畫面拍成圖檔並存在 SD Card 裡&lt;br /&gt;
首先要在 Manifest.xml 裡開啟 寫入的權限&lt;br /&gt;
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"&lt;br /&gt;
接著要把 View 轉成 Bitmap 物件&lt;br /&gt;
&lt;pre class="brush: java;"&gt;final ViewGroup _v = (ViewGroup) findViewById(R.id.root);
Bitmap bm = Bitmap.createBitmap(_v.getWidth(), _v.getHeight(),	Bitmap.Config.RGB_565);
_v.draw(new Canvas(bm));
&lt;/pre&gt;
透過 File 來存檔
先檢查使用者有沒有 SD Card
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public static boolean checkSDCard() {
    		if (Environment.getExternalStorageState().equals(
    				Environment.MEDIA_MOUNTED)) {
    			return true;
    		}
    		return false;
    	}
存檔
public static void saveBitmap(String pFolderPath, Bitmap pBitmap,
    			String pFileName) throws IOException {
    		
    		String _folderPath = pFolderPath;
    		if (_folderPath.lastIndexOf("/") == -1) {
    			_folderPath += "/";
    		}
    		File _file = new File(_folderPath + pFileName);
    		OutputStream _outStream  = new FileOutputStream(_file);

    		pBitmap.compress(Bitmap.CompressFormat.JPEG, 90, _outStream);
    	
    		_outStream.flush();
    		_outStream.close();
    	}
// 自動檔名依日期
public static String getTimeName() {
    		Date _date = new Date(System.currentTimeMillis());
    		SimpleDateFormat _sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
    		Random _random = new Random();
    		return _sdf.format(_date) + _random.nextInt(999);
    	}
&lt;/pre&gt;
其中會遇到一個小問題，當你這樣存檔時，&lt;br /&gt;
再進入 Android 預設的圖片庫時，會找不到那張圖片&lt;br /&gt;
Google 了一下，發現要呼叫 MediaScannerConnection 來更新&lt;br /&gt;
讓 Android 知道&lt;br /&gt;
原文連結：
&lt;a href="http://stackoverflow.com/questions/4646913/android-how-to-use-mediascannerconnection-scanfile" target="_blank"&gt; 點我 &lt;/a&gt;

&lt;br /&gt;
這樣就完成啦。&lt;br /&gt;
&lt;br /&gt;

轉載請註明出處 
&lt;a href="http://www.box.net/shared/stfh6p14q3snc80es32c" target="_blank"&gt;SourceCodeDownload&lt;/a&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-1261403376057853598?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0PsgDXs6k2UOI-tEFOJ6UA4-rNw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0PsgDXs6k2UOI-tEFOJ6UA4-rNw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0PsgDXs6k2UOI-tEFOJ6UA4-rNw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0PsgDXs6k2UOI-tEFOJ6UA4-rNw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/it_bUgIynpM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/1261403376057853598/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=1261403376057853598" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1261403376057853598?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/1261403376057853598?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/it_bUgIynpM/android-save-sd-card.html" title="Android Save 圖片至 SD Card" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/09/android-save-sd-card.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8MQXs9cCp7ImA9WhdWEUk.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-5777365926024960093</id><published>2011-09-04T23:06:00.001+08:00</published><updated>2011-09-04T23:08:00.568+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-04T23:08:00.568+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android layout" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android ImageView ScaleType</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
在 Android 裡的 ImageView 元件，可以放置圖片&lt;br /&gt;
其中可以設定 ScaleType&lt;br /&gt;
&lt;u&gt;&lt;a href="http://developer.android.com/reference/android/widget/ImageView.ScaleType.html" target="_blank"&gt;官方 API 說明&lt;/a&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
為了方便測試，在這先準備二張圖片&lt;br /&gt;
450x500和 500x450&lt;br /&gt;
筆者以 320x480 的 Emulator 來測試&lt;br /&gt;
&lt;br /&gt;
Layout 的部份放上二個 RadioButton 用來切換二圖不同 Size 的圖片&lt;br /&gt;
再放上六個 Button 來顯示圖片同 Size 的圖片
再放上六個 Button 來顯示圖片
&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-s_hQ39yAhFg/TmOQW1OtPEI/AAAAAAAAA8g/d321dzLrXiw/s400/device-2011-09-04-223103.jpg" width="267" /&gt;
&lt;br /&gt;
主程式
&lt;br /&gt;
&lt;pre class="brush: java;"&gt;package milkmidi.tutorial.imagescaletype;

import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.PopupWindow;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;

public class ImageViewScaleTypeMainActivity extends Activity implements OnCheckedChangeListener {
	

	Drawable mCurrentDrawable;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
     
        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
        radioGroup.setOnCheckedChangeListener(this);
        onCheckedChanged(null,R.id.radio_450x500);
    }
    @Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
    	switch (checkedId) {
			case R.id.radio_450x500:	
				mCurrentDrawable = getResources().getDrawable(R.drawable.a450x500); 
				break;
			case R.id.radio_500x450:	
				mCurrentDrawable = getResources().getDrawable(R.drawable.a500x450); 
				break;
		}		
	}    
    public void onClick(View v){
    	ScaleType scaleType = null;
    	switch (v.getId()) {
			case R.id.center_btn:	
				scaleType = ScaleType.CENTER;
				break;
			case R.id.center_crop_btn:
				scaleType = ScaleType.CENTER_CROP;
				break;
			case R.id.center_inside_btn:	
				scaleType = ScaleType.CENTER_INSIDE;
				break;
			case R.id.fit_center_btn:		
				scaleType = ScaleType.FIT_CENTER;
				break;
			case R.id.fit_end_btn:			
				scaleType = ScaleType.FIT_END;
				break;
			case R.id.fit_start_btn:		
				scaleType = ScaleType.FIT_START;
				break;
			case R.id.fit_xy_btn:			
				scaleType = ScaleType.FIT_XY;
				break;
			case R.id.matrix_btn:			
				scaleType = ScaleType.MATRIX;
				break;
		}    	
    	
    	ViewGroup view = (ViewGroup)getLayoutInflater().inflate(R.layout.image_view, null);
    	TextView tf = (TextView) view.findViewById(R.id.title_txt);
    	tf.setText(scaleType.toString());
    	
    	ImageView image = (ImageView)view.findViewById(R.id.image_view);
    	image.setImageDrawable(mCurrentDrawable);
    	image.setScaleType(scaleType);
    	PopupWindow pop = new PopupWindow(
    			view,
    			LayoutParams.FILL_PARENT,
				LayoutParams.FILL_PARENT, 
				true);
    	pop.setContentView(view);
    	pop.setBackgroundDrawable(new ColorDrawable(0x5500ff00));
    	pop.showAtLocation(findViewById(R.id.root), Gravity.TOP, 0, 0);
    	pop.update();
    }


	
}&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
CENTER&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Center the image in the view, but perform no scaling.&lt;br /&gt;
圖中置中，但不縮放&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-pjy3OY3eApI/TmORVL-qbPI/AAAAAAAAA8o/odxXDFtH9co/s400/device-2011-09-04-223545.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-_GA7j-fJzSE/TmORVPFlVJI/AAAAAAAAA8w/BfOpyo0PR30/s400/device-2011-09-04-223600.png" width="267" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CENTER_CROP&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding).&lt;br /&gt;
等比縮放，將超出範圍的切掉&lt;br /&gt;
&lt;br /&gt;


&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-AqW1MS9vtUs/TmORiR_jpzI/AAAAAAAAA84/GyJ3sMeoFLk/s400/device-2011-09-04-223612.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-iQ2YQuG8yK8/TmORimbP0HI/AAAAAAAAA9A/jELQrSnEFHE/s400/device-2011-09-04-223620.png" width="267" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CENTER_INSIDE&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or less than the corresponding dimension of the view (minus padding).&lt;br /&gt;
等比縮放，讓圖片縮至容器裡&lt;br /&gt;
&lt;br /&gt;


&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-vjEYblzUo4A/TmORtEe-2yI/AAAAAAAAA9I/TUHuGifoBFU/s400/device-2011-09-04-223628.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-TJJYIJpeI7U/TmORtZDi7ZI/AAAAAAAAA9Q/T5H4wBMQuS0/s400/device-2011-09-04-223636.png" width="267" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FIT_CENTER&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Scale the image using CENTER.&lt;br /&gt;
等比縮放，將圖片放在容器裡的正中間&lt;br /&gt;
&lt;br /&gt;


&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-97pz3I7uNsg/TmOR3NRkS2I/AAAAAAAAA9Y/EO2_qDj7QB0/s400/device-2011-09-04-223645.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-5YMGHF-hAlU/TmOR3aiCMwI/AAAAAAAAA9g/ZyyScdJ48xQ/s400/device-2011-09-04-223655.png" width="267" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FIT_END&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Scale the image using END.&lt;br /&gt;
等比縮放，將圖片放在容器裡的下方&lt;br /&gt;
&lt;br /&gt;


&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-q8a2k1-T92E/TmOR-WhkG8I/AAAAAAAAA9o/xlTcLYjVHa4/s400/device-2011-09-04-223704.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-21106mPX2Wg/TmOR-kdqWrI/AAAAAAAAA9w/vD2sB8qhyko/s400/device-2011-09-04-223713.png" width="267" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FIT_START&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Scale the image using START.&lt;br /&gt;
等比縮放，將圖片放在容器裡的上方&lt;br /&gt;
&lt;br /&gt;


&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-d77coJ05P0Y/TmOSGvxeNGI/AAAAAAAAA94/rxMlnAlWb-k/s400/device-2011-09-04-223722.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-qQOuzcfBniw/TmOSGzLRf0I/AAAAAAAAA-A/Pe7D1ie6Qz4/s400/device-2011-09-04-223733.png" width="267" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FIT_XY&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Scale the image using FILL.&lt;br /&gt;
整個稱滿容器，不會等比縮放&lt;br /&gt;
&lt;br /&gt;


&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-0ys7S4nbjf4/TmOSN7HyY1I/AAAAAAAAA-I/CI0lc3ziPPo/s400/device-2011-09-04-223746.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-wBR-jMMqV8M/TmOSOMwmP-I/AAAAAAAAA-Q/bo_3vr78Z8I/s400/device-2011-09-04-223754.png" width="267" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MATRIX&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;Scale using the image matrix when drawing.&lt;br /&gt;
研究中&lt;br /&gt;
&lt;br /&gt;


&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-Fkq8aROSnTA/TmOSWPb7CaI/AAAAAAAAA-Y/d2nm_ohrdn4/s400/device-2011-09-04-223802.png" width="267" /&gt;
&lt;img border="0" height="400" src="http://1.bp.blogspot.com/--wJPeWx384A/TmOSWQyy_VI/AAAAAAAAA-g/BBV0euxOEfk/s400/device-2011-09-04-223810.png" width="267" /&gt;
&lt;br /&gt;
轉載請註明出處 
&lt;br /&gt;
&lt;a href="http://www.box.net/shared/2l45kdnsq7udsx635j18" target="_blank"&gt;SourceCodeDownload&lt;/a&gt;&lt;br/&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-5777365926024960093?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JaWXGrx_pJTLv-GXdCRaApD2-Pk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JaWXGrx_pJTLv-GXdCRaApD2-Pk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JaWXGrx_pJTLv-GXdCRaApD2-Pk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JaWXGrx_pJTLv-GXdCRaApD2-Pk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/Gn-BK5JC1aI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/5777365926024960093/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=5777365926024960093" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5777365926024960093?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/5777365926024960093?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/Gn-BK5JC1aI/android-imageview-scaletype.html" title="Android ImageView ScaleType" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-s_hQ39yAhFg/TmOQW1OtPEI/AAAAAAAAA8g/d321dzLrXiw/s72-c/device-2011-09-04-223103.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/09/android-imageview-scaletype.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8NRXg4fCp7ImA9WhdWEUk.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-8466328338759253843</id><published>2011-08-12T12:09:00.001+08:00</published><updated>2011-09-04T23:08:14.634+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-04T23:08:14.634+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FLASHAS2" /><title>FlashAS2 載入 Youtube</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
對非程式人員來說，學習 AS3 是非常痛苦的&lt;br /&gt;
所以還是有許多人是使用 AS2 來開發專案，&lt;br /&gt;
所以奶小茶我還是決定來寫一些 AS2 的系列教學&lt;br /&gt;
&lt;br /&gt;
官方說明的 AS2 文件在這&lt;br /&gt;
&lt;a href="http://code.google.com/intl/zh-TW/apis/youtube/flash_api_reference_as2.html"&gt;點我&lt;/a&gt;&lt;br /&gt;
文件最小方有送上 AS2 的 fla&lt;br /&gt;
在這來補充幾個會遇到的問題&lt;br /&gt;
&lt;br /&gt;
1. 載入 youtube 影片後, removeMovieClip 後，聲音依然存在，或是越看越慢的問題&lt;br /&gt;
答，不要 youtube 時，要執行 ytplayer.destroy(); 這樣才清的掉。&lt;br /&gt;
&lt;br /&gt;
2. 要更改影片 size 呢&lt;br /&gt;
需要等到 youtube 影片載入後，呼叫 setSize(Width, Hight) 即可&lt;br /&gt;
&lt;br /&gt;
&lt;embed src="http://dl.dropbox.com/u/2069696/blog/swf/2011_08_11_as2YoutubeLoader.swf" width="500" height="400"&gt;&lt;/embed&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id="fullpost"&gt;轉載請註明出處  &lt;br /&gt;
&lt;a href="http://dl.dropbox.com/u/2069696/blog/swf/2011_08_11_as2YoutubeLoader.zip"&gt;SourceCodeDownload&lt;/a&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-8466328338759253843?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t4duZ8ULbvqQmTyU4ZL1fm_T0KA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t4duZ8ULbvqQmTyU4ZL1fm_T0KA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t4duZ8ULbvqQmTyU4ZL1fm_T0KA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t4duZ8ULbvqQmTyU4ZL1fm_T0KA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/asTPVD-qOBI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/8466328338759253843/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=8466328338759253843" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/8466328338759253843?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/8466328338759253843?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/asTPVD-qOBI/flashas2-youtube.html" title="FlashAS2 載入 Youtube" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/08/flashas2-youtube.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUICQX0zfyp7ImA9WhdSEEk.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-3258260233190773024</id><published>2011-07-19T11:52:00.000+08:00</published><updated>2011-07-19T11:52:40.387+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T11:52:40.387+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android SDK R12,無法啟動 Emulator 的問題</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
最近很開心的更新 Android SDK 版本&lt;br /&gt;
當要啟動 Emualotr 時，總是出現&lt;br /&gt;
invalid command-line parameter: Files\Android\android-sdk-windows\tools/emulator-arm.exe.&lt;br /&gt;
Hint: use '@foo' to launch a virtual device named 'foo'.&lt;br /&gt;
please use -help for more information&lt;br /&gt;
查了一下發現是 SDK 的大 Bug&lt;br /&gt;
在 WIN7 下, 空白字元會產生錯誤&lt;br /&gt;
本來想搬資料夾，但又覺得麻煩，後來找到這篇&lt;br /&gt;
&lt;a href="http://code.google.com/p/android/issues/detail?id=18317" target="_blank"&gt;http://code.google.com/p/android/issues/detail?id=18317&lt;/a&gt;&lt;br /&gt;
把本來的路徑：&lt;br /&gt;
C:\&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;Program Files&lt;/b&gt;&lt;/span&gt;\Android\android-sdk\&lt;br /&gt;
換成&lt;br /&gt;
C:\&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;PROGRA~1&lt;/b&gt;&lt;/span&gt;\Android\android-sdk&lt;br /&gt;
就搞定了，連資料夾都可以不用搬。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-3258260233190773024?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QifCCGFvqqjKA3ecprEwl6o8FWQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QifCCGFvqqjKA3ecprEwl6o8FWQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QifCCGFvqqjKA3ecprEwl6o8FWQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QifCCGFvqqjKA3ecprEwl6o8FWQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/i2gm4J1CXro" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/3258260233190773024/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=3258260233190773024" title="1 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/3258260233190773024?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/3258260233190773024?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/i2gm4J1CXro/android-sdk-r12-emulator.html" title="Android SDK R12,無法啟動 Emulator 的問題" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/07/android-sdk-r12-emulator.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQDQnw-eSp7ImA9WhdTFkw.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-4744362286271109229</id><published>2011-07-14T11:15:00.001+08:00</published><updated>2011-07-14T11:16:13.251+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T11:16:13.251+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIR" /><title>移除 iOS App icon 自動幫你加上亮光</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
在開發 iOS 時, 水果會貼心的在你的 app icon 加上亮光&lt;br /&gt;
如果不想要加呢?&lt;br /&gt;
原文是這樣寫的：&lt;br /&gt;
Note: You can prevent iOS from adding the shine to your application icon. To do this, you need to add the UIPrerenderedIcon key to your application's Info.plist file (to learn about this file, see 「The Information Property List」 in iOS Application Programming Guide).&lt;br /&gt;
The presence (or absence) of the added shine does not change the dimensions of your application icon.&lt;br /&gt;
&lt;br /&gt;
參考文章：&lt;br /&gt;
&lt;a href="http://developer.apple.com/" target="_blank"&gt;http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW2&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
如果用 AIR 開發的話，只需要在你的 xml 裡加上&lt;br /&gt;
&lt;br /&gt;
＜InfoAdditions＞&lt;br /&gt;
＜![CDATA[ &lt;br /&gt;
＜key＞UIPrerenderedIcon＜/key＞&lt;br /&gt;
＜true/＞&lt;br /&gt;
]]＞&lt;br /&gt;
＜/InfoAdditions&amp;gt;＞&lt;br /&gt;
&lt;br /&gt;
參考文章：&lt;br /&gt;
&lt;a href="http://help.adobe.com/zh_TW/air/build/WS901d38e593cd1bac1e63e3d129907d2886-8000.html" target="_blank"&gt;http://help.adobe.com/zh_TW/air/build/WS901d38e593cd1bac1e63e3d129907d2886-8000.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
轉載請註明出處&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-4744362286271109229?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j1S13_W4Nmx9gZM8pgQmAPdxHFE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j1S13_W4Nmx9gZM8pgQmAPdxHFE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j1S13_W4Nmx9gZM8pgQmAPdxHFE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j1S13_W4Nmx9gZM8pgQmAPdxHFE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/220fgebGvC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/4744362286271109229/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=4744362286271109229" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/4744362286271109229?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/4744362286271109229?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/220fgebGvC0/ios-app-icon.html" title="移除 iOS App icon 自動幫你加上亮光" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/07/ios-app-icon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QNRnk_fCp7ImA9WhZbGUQ.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-469172451701030371</id><published>2011-06-25T18:47:00.005+08:00</published><updated>2011-06-25T18:56:37.744+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-25T18:56:37.744+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flashdevelop" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>FlashDevelop4 compile Android, iOS app</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
相信大家對 Adobe CS5.5 能夠將 AIR 發怖到 Android 和 iOS 平台是一件非常興奮的事&lt;br /&gt;
今天就來分享如何使用 FlashDevelop4 , 透過 Flex SDK , 下 Command Line 的方法&lt;br /&gt;
直接 compile 成 apk 和 ipa 檔。&lt;br /&gt;
我的工作環境是 Windows7 32或64皆可&lt;br /&gt;
安裝所需的檔&lt;br /&gt;
1. 先下載 FlashDevelop4 &lt;br /&gt;
&lt;a href="http://www.flashdevelop.org/community/viewtopic.php?f=9&amp;amp;t=8281" target="_blank"&gt;http://www.flashdevelop.org/community/viewtopic.php?f=9&amp;amp;t=8281&lt;/a&gt;&lt;br /&gt;
目前還是 Beta 版, 如果 FD3 和 FD4 想共存的話，記的在安裝 FD4 時要選擇 standard &lt;br /&gt;
安裝時, 會問你要不要自動下載 Flex SDK 和 AIR SDK , 把他取消掉, 我們自己手動下載。&lt;br /&gt;
2. 下載 FlexSDK , 筆者我下載的是 Flex4.5(內建 AIR2.6 SDK) 的版本, &lt;br /&gt;
3. 下載 AIR2.7 SDK &lt;a href="http://www.adobe.com/products/air/sdk/"&gt;http://www.adobe.com/products/air/sdk/&lt;/a&gt;&lt;br /&gt;
完成後, 把 AIR2.7 裡的檔案，整個蓋掉 Flex4.5 &lt;br /&gt;
4. java runtime&lt;br /&gt;
5. Android SDK &lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;開發流程&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
1.啟動 FlashDevelop4&lt;br /&gt;
&lt;img border="0" height="92" src="http://2.bp.blogspot.com/-mKGqwbhtBLQ/TgW08VYFTMI/AAAAAAAAA3M/HrfqoYRT_14/s400/2011-06-25_175423.jpg" width="76" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.設定 FlexSDK 路徑&lt;br /&gt;
3.開啟新專案，選擇 AS3 Android App&lt;br /&gt;
&lt;img border="0" height="95" src="http://3.bp.blogspot.com/-XsFjJx00IP4/TgW03v8VlBI/AAAAAAAAA3E/U-k5vh-0vB8/s400/2011-06-25_175505.jpg" width="400" /&gt;&lt;br /&gt;
&lt;br /&gt;
此時會看到你的 Project 長成這樣&lt;br /&gt;
&lt;img border="0" src="http://1.bp.blogspot.com/-HO6478w5NkM/TgW1TpwPekI/AAAAAAAAA3Q/N8AtGXkmgaA/s1600/2011-06-25_175543.jpg" /&gt;&lt;br /&gt;
&lt;br /&gt;
3. 修改 FlexSDK 路徑和Android SDK路徑&lt;br /&gt;
因為背後是使用 Command Line 的方法來 compile , 所以需要再設定一次&lt;br /&gt;
開啟 bat/SetupSDK.bat&lt;br /&gt;
&lt;br /&gt;
:: Path to Flex SDK&lt;br /&gt;
set FLEX_SDK=C:\Program Files\Adobe\Adobe Flash Builder 4.5\sdks\4.5.1&lt;br /&gt;
&lt;br /&gt;
:: Path to Android SDK&lt;br /&gt;
set ANDROID_SDK=D:\Program Files\Android\android-sdk-windows\platform-tools&lt;br /&gt;
&lt;br /&gt;
完成後，按下 Ctrl + Enter, 都沒問題的話，應該會看到 AIR runtime 包住你寫的 flash 檔。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;編譯成 Android 使用的 apk 檔&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
1. 首先要產生驗證檔 *.p12&lt;br /&gt;
在 FD4 的 Project 面版，找到 bat/CreateCertificate.bat , 按右鍵，選擇 Execute&lt;br /&gt;
沒意外的話，在同資料夾會產生一個叫 AppTest.p12&lt;br /&gt;
&lt;img border="0" height="145" src="http://2.bp.blogspot.com/-oTclskww0cE/TgW2wchhkWI/AAAAAAAAA3Y/30IRBuYfG6c/s400/2011-06-25_182108.jpg" width="184" /&gt;&lt;br /&gt;
&lt;br /&gt;
如果想產生屬於自已的驗證檔的話，&lt;br /&gt;
可以開啟 bat\SetupApplication.bat&lt;br /&gt;
更改&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;set CERT_NAME="AppTest"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;set CERT_PASS=fd&lt;/span&gt;&lt;br /&gt;
這二個, 在這我們都先用預設&lt;br /&gt;
&lt;br /&gt;
2. 編譯成 apk&lt;br /&gt;
找到 PackageApp.bat, 按右鍵選 Execute, &lt;br /&gt;
接著就會在 apk 資料夾裡，產生一個 AppTest.apk, 這時候就可以安裝到你的手機了。&lt;br /&gt;
&lt;br /&gt;
3. 開發測試&lt;br /&gt;
有時希望直接在手機上測, 先接上你的 Android 手機, &lt;br /&gt;
開啟 Run.bat &lt;br /&gt;
把&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;:run_target&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;goto desktop&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;::goto device&lt;/span&gt;&lt;br /&gt;
換成&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;:run_target&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;::goto desktop&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;goto device&lt;/span&gt;&lt;br /&gt;
這時按下 Ctrl + Enter 時, 就會發怖到你的手機裡&lt;br /&gt;
而且 trace 也是可以用喔&lt;br /&gt;
因為是在開發模式下, 所以效能會比較差一些&lt;br /&gt;
記得要正式發怖時, 上方工具列的發怖, 要改成 release 版&lt;br /&gt;
&lt;img border="0" height="105" src="http://1.bp.blogspot.com/-Yq1c00uoLOI/TgW4SiGjezI/AAAAAAAAA3g/LGqCmc5GjaM/s400/2011-06-25_182756.jpg" width="213" /&gt;&lt;br /&gt;
&lt;br /&gt;
如果想把正式版的檔案, 打包並同時傳到手機裡&lt;br /&gt;
只要執行 PackageInstallApp.bat 即可, 超方便的啦&lt;br /&gt;
&lt;br /&gt;
關於 application.xml 設定&lt;br /&gt;
在編譯成 apk 或是 ipa 檔時, 都是會參考這份 xml 的設定&lt;br /&gt;
如果懶的研究, 可以按一下 Project 面版上的 AIR icon, 就會有介面讓你直接改了&lt;br /&gt;
在這提出幾個重點&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;&lt;application xmlns="http://ns.adobe.com/air/application/2.7"&gt; 編譯的 AIR 版本號&lt;/application&gt;
&lt;id&gt;milkmidi.test.AppTest&lt;/id&gt; 視別用的 id , 如果是同樣的 id 的話，後者安裝會蓋掉前者

&lt;content&gt;AppTest.swf&lt;/content&gt;
&lt;autoorients&gt;false&lt;/autoorients&gt; Device 是否自動旋轉
&lt;aspectratio&gt;landscape&lt;/aspectratio&gt; Device 的方向, 水平或是垂直
&lt;fullscreen&gt;true&lt;/fullscreen&gt; 是否滿版, 滿版的話, 就不會出現手機上方的電量Bar
&lt;rendermode&gt;gpu&lt;/rendermode&gt; 啟動 gpu render


&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;發怖成 ipa 格式&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
我是參考這一篇文章來改寫的&lt;br /&gt;
&lt;a href="http://blog.theflashblog.com/?p=2764" target="_blank"&gt;http://blog.theflashblog.com/?p=2764&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
將以下文字存成 PackageAppToIPA.bat&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;@echo off
:: 2011/6/24 下午 04:04
set PAUSE_ERRORS=1


echo start package app to ipa

set JAVA=D:\Program Files\Java\jre6\bin\java.exe
:: 指定你的 java 路徑
set ADT=D:\Program Files\adobe\Adobe Flash Builder 4.5\sdks\4.5.0_AIR2.7\lib\adt.jar
:: 指定 FlexSDK adt 路徑
set P12=D:\46_iPhone\fakeCcertificate\mycert.p12
:: 指定 iOS 用的驗證檔, 在這是用筆者寫的前幾篇教學裡的假驗證檔
set PASSWORD=1234
:: 驗證檔密碼
set MOBILEPROVISION=D:\46_iPhone\fakeCcertificate\Fake.mobileprovision
:: mobileprovision 路徑

set APP_NAME=AppTest
:: app 的名稱
:: 
set APP_DIR=bin
set APPXML=application.xml
set SWF=%APP_DIR%\%APP_NAME%.swf

set APP_ID=milkmidi.test.AppTest
::match Application descriptor id 



set FILE_OR_DIR=-C %APP_DIR% .
echo package ipa appname %APP_NAME% appid %APP_ID%


"%JAVA%" -jar "%ADT%" -package -target ipa-ad-hoc -storetype pkcs12 -keystore %P12% -storepass %PASSWORD% -provisioning-profile %MOBILEPROVISION% %APP_NAME%.ipa %APPXML% %SWF% %FILE_OR_DIR%

pause
&lt;/pre&gt;在發怖成 ipa 檔時, 可以選擇 iPhone 或是 iPad &lt;br /&gt;
只要在 application.xml 加上&lt;br /&gt;
string 1 是 iPhone&lt;br /&gt;
string 2 是 iPad&lt;br /&gt;
二隻都要支援的話，就二個都打吧&lt;br /&gt;
&lt;pre class="brush: as3;"&gt;&lt;iphone&gt;
    &lt;infoadditions&gt;UIDeviceFamily
&lt;array&gt;
 &lt;string&gt;1&lt;/string&gt;
 &lt;string&gt;2&lt;/string&gt;
&lt;/array&gt;]]&amp;gt;&lt;/infoadditions&gt;
    &lt;requesteddisplayresolution&gt;standard&lt;/requesteddisplayresolution&gt;
  &lt;/iphone&gt;
&lt;/pre&gt;一樣按下右鍵, execute 他, 就可以開始 compile 了，要等一段時間就是了&lt;br /&gt;
&lt;br /&gt;
轉載請註明出處  http://milkmidi.blogspot.com/2011/06/flashdevelop4-compile-android-ios-app.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-469172451701030371?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vonO2jnfB5UsbtdoSl8oQUrQ1oA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vonO2jnfB5UsbtdoSl8oQUrQ1oA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vonO2jnfB5UsbtdoSl8oQUrQ1oA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vonO2jnfB5UsbtdoSl8oQUrQ1oA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/W0fCj1xg8Yw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/469172451701030371/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=469172451701030371" title="13 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/469172451701030371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/469172451701030371?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/W0fCj1xg8Yw/flashdevelop4-compile-android-ios-app.html" title="FlashDevelop4 compile Android, iOS app" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-mKGqwbhtBLQ/TgW08VYFTMI/AAAAAAAAA3M/HrfqoYRT_14/s72-c/2011-06-25_175423.jpg" height="72" width="72" /><thr:total>13</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/06/flashdevelop4-compile-android-ios-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UHQnk-fSp7ImA9WhZbEUk.&quot;"><id>tag:blogger.com,1999:blog-2389124153774442796.post-7840621013476399437</id><published>2011-06-15T20:29:00.003+08:00</published><updated>2011-06-15T20:33:53.755+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-15T20:33:53.755+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Android 漢語拼音排序</title><content type="html">大家好，我是奶綠茶&lt;br /&gt;
研究了好一陣子的 Android &lt;br /&gt;
也上架了一個 &lt;a target="_blank" href="https://market.android.com/details?id=milkmidi.minicontact"&gt;WP7Contact&lt;/a&gt; 的 App, &lt;br /&gt;
來分享一下如果使用漢語拼音來排序聯絡人&lt;br /&gt;
android 官方有分享一個 HanziToPinyin.java&lt;br /&gt;
使用這個類別，就可以得到漢語拼音&lt;br /&gt;
接著透過 String 的 compareToIgnoreCase&lt;br /&gt;
就可以依字母排序&lt;br /&gt;
&lt;br /&gt;
1. 得到聯絡人&lt;br /&gt;
先過濾一下，只要出現有電話的聯絡人即可，同時只要得到 _id 和 display_name 的欄位就好&lt;br /&gt;
&lt;pre class="brush: java;"&gt;String select = "((" + ContactsContract.Data.DISPLAY_NAME
    + " NOTNULL) AND (" + ContactsContract.Data.HAS_PHONE_NUMBER
    + "=1) AND (" + ContactsContract.Data.DISPLAY_NAME
    + " != '' ))";

  final String[] PROJECTION = new String[]{
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME
  };
  
  Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
    PROJECTION, select, null, null);
&lt;/pre&gt;&lt;br /&gt;
2. 得到漢語拼音, 這個 function 是從 android 裡另一個類別取出的&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public static String getSortKey(String pName) {
        ArrayList&lt;token&gt; tokens = HanziToPinyin.getInstance().get(pName);
        if (tokens != null &amp;&amp; tokens.size() &gt; 0) {
            StringBuilder sb = new StringBuilder();
            for (Token token : tokens) {          
                if (Token.PINYIN == token.type) {
                    if (sb.length() &gt; 0) {
                        sb.append(' ');
                    }
                    sb.append(token.target);
                    sb.append(' ');
                    sb.append(token.source);
                } else {
                    if (sb.length() &gt; 0) {
                        sb.append(' ');
                    }
                    sb.append(token.source);
                }
            }
            return sb.toString();
        }
        return pName;
 }
&lt;/pre&gt;排序的方法&lt;br /&gt;
&lt;pre class="brush: java;"&gt;private final class PinyinComparator implements Comparator&lt;ContactInfo&gt; {
  public int compare(ContactInfo o1, ContactInfo o2) {  
   return o1.sort_key.compareToIgnoreCase(o2.sort_key);
  } 
 }
&lt;/pre&gt;&lt;br /&gt;
ListView 使用的 Adapter&lt;br /&gt;
&lt;pre class="brush: java;"&gt;public class ContactAdapter extends BaseAdapter {
  private LayoutInflater mInflater;
  private ArrayList&lt;ContactInfo&gt; itemList;

  public ContactAdapter(Context context, ArrayList&lt;ContactInfo&gt; itemList) {
   mInflater = LayoutInflater.from(context);
   this.itemList = itemList;
  }
  public int getCount() {   return itemList.size();  }

  public Object getItem(int position) { return itemList.get(position);  }

  public long getItemId(int position) { return position;  }

  public View getView(int position, View convertView, ViewGroup parent) {
   View v = convertView;
   ViewHolder holder = null;
   // 快取 ListView 的技巧
   // 先斷判是否已經產生過 View 
   // 把該子View 記錄下來，這樣就不用每次都重新 findViewById   
   if (v == null) {
    v = mInflater.inflate(R.layout.main_list_row, null);
    holder = new ViewHolder();
    holder.nameText = (TextView) v.findViewById(R.id.name_txt);
    holder.idText = (TextView) v.findViewById(R.id.description_txt);
    v.setTag(holder);
   } else {
    holder = (ViewHolder) v.getTag();
   }
   holder.nameText.setText(itemList.get(position).contact_name);
   holder.idText.setText(itemList.get(position).sort_key);
   return v;
  }


 }
 private class ViewHolder {
  TextView nameText;
  TextView idText;
 }

 private class ContactInfo {  
  String contact_name;  
  String sort_key;
  long _id;
 }
&lt;/pre&gt;轉載請註明出處&lt;br /&gt;
&lt;br /&gt;
&lt;a target="_blank" href="http://www.box.net/shared/q0j7rgfnsh49jmb2hit4"&gt;SourceCodeDownload&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2389124153774442796-7840621013476399437?l=milkmidi.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VAYH3Y-SbHbTddCwkjogz_edBDA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VAYH3Y-SbHbTddCwkjogz_edBDA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VAYH3Y-SbHbTddCwkjogz_edBDA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VAYH3Y-SbHbTddCwkjogz_edBDA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MilkmidiBlog/~4/Aiw-BSeZTcI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://milkmidi.blogspot.com/feeds/7840621013476399437/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2389124153774442796&amp;postID=7840621013476399437" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/7840621013476399437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2389124153774442796/posts/default/7840621013476399437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MilkmidiBlog/~3/Aiw-BSeZTcI/android.html" title="Android 漢語拼音排序" /><author><name>milkmidi</name><uri>http://www.blogger.com/profile/03696025671272118687</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_nieRpj-fwvM/SRHTNX9wGLI/AAAAAAAAAGI/ddhqp_ImV-M/S220/milkmidiBottle2007_100x100.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://milkmidi.blogspot.com/2011/06/android.html</feedburner:origLink></entry></feed>

