ایجاد گالری تصویر بصورت xml
سلام ... امیدوارم خوب باشید ...
ببخشید ... من فکر می کردم بتون زودتر مطلب بزارم...
امیدوارم این مطلب خوب باشه ...
در مورد مرجعش هم خیالتون راحت ...
فایل آموزش را هم باید یه کوچولو تغییر بدم ، تا چند وقت دیگه پیوست می زارم ... الان flex روی سیستمم نصب ندارم ... تازه 7 نصب کردم
در این آموزش از نرم افزار Flex Builder به ایجاد یک گالری تصویر با ساختار xml خواهیم پرداخت. مسیر ، عنوان و تاریخ تصاویر بطور مستقیم در فایل xml ذخیره و در نهایت نصاویر در دو سایز
کوچک پس از کلیک بر روی آنها در سایز بزرگ بصورت پاپ آپ نمایش داده خواهد می شوند.
مرحله اول :
ایجاد یک پروژه جدید در فلکس که ما نام آن را GalleryPopUp قرار داده و عنوان Main application file را main.mxml قرار می دهیم.
موقیعت سطحی پروژه خود را در حالت افقی و عمودی در مرکز صفحه بصورت زیر تنظیم می کنیم :
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
horizontalAlign="center" verticalAlign="middle">
مرحله دوم :
کلیه اطلاعات مربوط به فایل xml خود را با مقادیر و پارامترهای مربوط به آن بصورت زیر تعریف نموده و نام آن را data.xml و در زیر مجموعه شاخه src ایجاد نمائید.
<?xml version="1.0"?>
<gallery>
<movie>
<pic>PHOTOFILE_01.jpg</pic>
<title>TITLE_01</title>
<date>2009-10-23</date>
</movie>
<movie>
<pic>PHOTOFILE_02.jpg</pic>
<title>TITLE_02</title>
<date>2009-10-23</date>
</movie>
...
<movie>
<pic>PHOTOFILE_~.jpg</pic>
<title>TITLE_~</title>
<date>2009-10-23</date>
</movie>
</gallery>
مرحله سوم :
پس از اینکه فایل xml خود را تکمیل نمودید فولدر "thumbs" را ایجاد در عکس های سایز کوچک خود را کپی نموده و سپس فولدر "posters" را ایجاد در عکس های بزرگ را در آن قرار دهید. در این صورت شما باید دو مسیر بصورت زیر داشته باشید:
\\GalleryPopUp\bin-debug\assets\thumbs\
\\GalleryPopUp\bin-debug\assets\posters\
مرحله چهارم :
ارتباط فایل data.xml را بصورت زیر با پروژه خود برقرار می کنیم :<mx:HTTPService id="service" url="data.xml" result="serviceHandler(event)"/>
مرحله پنجم :
به محیط کد پروژه خود بر می گردیم و یک سند جدید ایجاد و متغیرهای arraycollection و defined را ایجاد می کنیم تا بتوانیم داده های برگرفته از xml خود را با تابع serviceHandler فراهم کنیم.
مرحله ششم :
جهت بارگزاری نهای فایل xml می بایست این فرآیند را با متد HTTPService بشکل زیر تکمیل نمائید :
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
horizontalAlign="center" verticalAlign="middle"
creationComplete="service.send()">
مرحله هفتم :
در این مرحله می بایست مسیر عکس های گالری و تاریخ آن را مشخص نماییم . با توجه به اینکه عکس های کوچک گالری را در مسیر thumbs کپی نموده ایم آن را مشابه کد ذیل در تگ itemRenderer در بخش های image و lable تعریف کرده ایم.
< mx:TileList id="moviesList" dataProvider="{movies}"
direction="horizontal"
width="800" height="450" rowHeight="150" columnWidth="200">
<mx:itemRenderer>
<mx:Component>
<mx:VBox horizontalAlign="center" verticalAlign="middle">
<mx:Image source="assets/thumbs/{data.pic}"/>
<mx:Label text="{data.date}" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
مرحله هشتم :
در این مرحله لازم است یک کامپوننت جدید اینجاد نماییم ، ما نام آن را Window.MXML قرار داده ایم. با توجه به اینکه ما می خواهیم با کلیک بر روی عکس های کوچک گالری عکس ها بصورت بزرگ نمایش داده شود از ترفند پنجره popup استفاده می کنم.
در این قسمت ما عنوان تصویر را در موقعیت TitleWindow و مقدار محتوی پنجره پاپ آپ را برابر رشته متغیر sourceImage در فایل xml تنظیم می کنیم.
< ?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" width="400" height="520"
horizontalAlign="center"
showCloseButton="true"
close="closeWindow(event);" >
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
[Bindable]
public var sourceImage:String;
private function closeWindow(e:CloseEvent):void {
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:Image source="{sourceImage}"/>
</mx:TitleWindow>
مرحله نهم :
جهت بستن پنجره باز شده که تا مرحله قبل آن را ایجاد نمودیم روش دیگری را بجزء کلید Close استفاده می کنیم که نیاز داریم تابع جدیدی تعریف کینم ، تابع CloseEvent را بهمین منظور ایجاد می کنیم که با این عمل با کلیک و حتی جابجا کردن پنجره PopUp بصورت اتوماتیک بسته می شود.
< mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" width="400" height="520"
horizontalAlign="center"
showCloseButton="true"
close="closeWindow(event);"
click="dispatchEvent(new CloseEvent(CloseEvent.CLOSE));">
مرحله دهم :
دوباره به کامپوننت main.xml بازگردید. رویداد جدیدی به نام launchPopUp ایجاد نموده و آن را برابر click قرار می دهیم.
< mx:TileList id="moviesList" dataProvider="{movies}"
direction="horizontal"
width="800" height="450" rowHeight="150" columnWidth="200"
click="launchPopUp(event)">
مرحله یازدهم :
در این مرحله که مرحله آخر ما می باشد کلاس های مربوط به css style های پروژه خود را تعریف می کنیم :
<mx:Style> global{
modalTransparency : .8;
modalTransparencyColor : #000000;
}
Application{
backgroundGradientColors: #ffffff, #ffffff;
backgroundGradientAlphas: 1, 1;
}
TileList{
selectionColor: #717070;
rollOverColor: #CCCCCC;
borderStyle : none;
}
TitleWindow{
borderColor : #C1C1C1;
borderAlpha : .8;
fontSize : 14;
fontFamily :Georgia;
fontWeight : bold ;
color : #FFFFFF;
}
Label{
color : #000000;
fontStyle : italic;
}
</mx:Style>
جمع بندی کدهای شما در نهایت بصورت زیر خواهد بود
:Main.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
horizontalAlign="center" verticalAlign="middle"
creationComplete="service.send()" >
<mx:Style>
global{
modalTransparency : .8;
modalTransparencyColor : #000000;
}
Application{
backgroundGradientColors: #ffffff, #ffffff;
backgroundGradientAlphas: 1, 1;
}
TileList{
selectionColor: #717070;
rollOverColor: #CCCCCC;
borderStyle : none;
}
TitleWindow{
borderColor : #C1C1C1;
borderAlpha : .8;
fontSize : 14;
fontFamily :Georgia;
fontWeight : bold ;
color : #FFFFFF;
}
Label{
color : #000000;
fontStyle : italic;
}
</mx:Style>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.managers.PopUpManager;
[Bindable]
private var movies:ArrayCollection;
private function serviceHandler(event:ResultEvent):void{
movies = event.result.gallery.movie;
}
private function launchPopUp(e:MouseEvent):void {
if(moviesList.selectedItem){
var win : Window = new Window();
win.sourceImage = "assets/posters/"+moviesList.selectedItem.pic;
win.title = moviesList.selectedItem.title;
PopUpManager.addPopUp(win,this,true);
PopUpManager.centerPopUp(win);
}
}
]]>
</mx:Script>
<mx:HTTPService id="service" url="data.xml" result="serviceHandler(event)"/>
<mx:TileList id="moviesList" dataProvider="{movies}"
direction="horizontal"
width="800" height="450" rowHeight="150" columnWidth="200"
click="launchPopUp(event)">
<mx:itemRenderer>
<mx:Component>
<mx:VBox horizontalAlign="center" verticalAlign="middle">
<mx:Image source="assets/thumbs/{data.pic}"/>
<mx:Label text="{data.date}" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
</mx:Application>
Window.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" width="400" height="520"
horizontalAlign="center"
showCloseButton="true"
close="closeWindow(event);"
click="dispatchEvent(new CloseEvent(CloseEvent.CLOSE));">
&l0t;mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
[Bindable]
public var sourceImage:String;
private function closeWindow(e:CloseEvent):void {
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:Image source="{sourceImage}"/>
</mx:TitleWindow>