FLEX 一次開啟多個檔案 & 限制檔案類型
上次開啟圖片放入 FLASH 中,我們實做的是一次讀取一個檔案,今天, ♣梅干桑♣ 也真宵貪阿,居然想要一次讀入七八張圖片,直接放入 FLASH 中,好吧,沒關係練功不分時間,這次不但一次讀取多張圖片,並且加入限制使用者只可以開啟影像類型的檔案,並且限定副檔名的類型。
首先我們來介紹限制檔案類型,我們用 FileFilter 來實作,並且使用陣列的方式,傳入 browse 的方法中,可以同時使用多組的 FileFilter ,可以參考 Adobe docs 。
再來是讀取多個檔案就不是用上次的 FileReference 了,而是使用 FileReferenceList 這組類別,不過當選擇到檔案之後,還是必須使用迴圈並且利用 FileReference 做每個檔案的 load 方法。
注意 : FLEX SDK 4 & Flash Player 10 需要 !
LoadAllPics.mxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="16" xmlns:net="flash.net.*">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
//儲存圖片的陣列物件
[Bindable]
public var ac:ArrayCollection = new ArrayCollection();
//將 frlist 所有的陣列內的檔案做一次 LOAD
private function selectHandler(evnet:Event):void{
//逐次將 fileList 內的檔案都 load 一次
for(var i:int=0;i<this.frlist.fileList.length;i++){
//建立一個暫時的 fileReference 來做送出的動作
var fr_temp:FileReference = new FileReference();
//取得檔案
fr_temp = this.frlist.fileList[i];
//加入檔案 load 完成的偵聽動作
fr_temp.addEventListener(Event.COMPLETE,completeHandler);
//執行讀取
fr_temp.load();
}
}
//完成後將讀取完成的資料塞入物件,物件再轉存到陣列中保留
private function completeHandler(event:Event):void{
//之前是直接讀取 fr 物件內的資訊
//但是因為現在沒有固定宣告所以需要用 event 所拿到的資料
var obj:Object = new Object();
obj.filename = event.currentTarget.name;
obj.data = event.currentTarget.data;
this.ac.addItem(obj);
}
//打開瀏覽動作
private function clickHandler():void{
//設定資料型態過濾只接受 圖片格式
var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png");
this.frlist.browse([imagesFilter]);
}
//點擊到 dataGrid 內的物件,將被點擊的 DATA 套用到 IMAGE 上
private function itemClickHandler():void{
this.image.source = this.dg.selectedItem.data;
}
]]>
</mx:Script>
<mx:HBox width="810">
<mx:VBox width="200" height="100%" horizontalAlign="center">
<mx:Button label="讀取圖片" click="clickHandler()"/>
<mx:DataGrid id="dg" width="100%" height="100%" dataProvider="{this.ac}" itemClick="itemClickHandler()">
<mx:columns>
<mx:DataGridColumn headerText="檔案名稱" dataField="filename"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
<mx:Canvas width="600" height="600" backgroundColor="white">
<mx:Image id="image" width="100%" height="100%"/>
</mx:Canvas>
</mx:HBox>
<!-- 一次選取多個檔案的類別 -->
<net:FileReferenceList id="frlist" select="selectHandler(event)"/>
</mx:Application> |
Random Posts
Loading…
相關文章 :










呵呵~~要搞就要搞大一點~你說是吧!
收下啦!
還好你沒說你這是在 ” 為民口舌 ” @@~
請問一下 我們試跑程式的時候
只要是有.load的地方就會出錯
可是我們不知道是哪裡有問題
Severity and Description Path Resource Location Creation Time Id
1061: 呼叫可能未定義的方法 load (透過靜態類型 flash.net:FileReference 的參考)。 MSN_photo/src MSN_photo.mxml line 21 1242567236363 27
類似這樣
謝謝你!!!
請問一下 我們想要學習這項功能
可是只要是有.load的地方就會出錯
Severity and Description Path Resource Location Creation Time Id
1061: 呼叫可能未定義的方法 load (透過靜態類型 flash.net:FileReference 的參考)。 MSN_photo/src MSN_photo.mxml line 21 1242567236363 27
類似這樣 可以請問我們是那裏有問題嘛
謝謝你 非常感激^^
@阿芃
.load 方法
你必須要先設定 flash player 是 10 以上喔
不然 .load 會出錯
不好意思我又來問問題了
目前我使用老師您寫的功能
可是希望可以把上傳的圖片用縮圖的方式顯示在datagrid
我用了itemRenderer還是沒有辦法讀出縮圖
我把object改成image也一樣抓不到
obj.data = event.currentTarget.data; —>這一行
想請問老師可以怎樣修改它?謝謝老師^^
@阿芃
你可以說明的在清楚一點嗎?
這樣子我聽不太懂 ^^
我們希望可以上傳照片以後
datagrid裡面顯示的不是照片的名稱 而是上傳的那張圖的縮圖
不知道有沒有辦法達成
非常非常的感謝您!!!!!!!
@阿芃
我已經幫你實作出來
請看最近的文章喔~
不好意思我又回來問問題了>”<
想要請問關於arraycollection的問題
我把image加入arraycollection裡面,然後我去抓image的index
但是我不管怎麼抓都會抓到最後一個的index
想請問有甚麼方法可以抓到每一個image的index呢??
謝謝^^
@milk
耶….
要貼一下你的程式碼嗎?~
如果你是用 array.getItemIndex(object) 應該是可以正確拿出 INDEX 阿