<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Flex, PHP, jQuery i inne pasje</title>
	<atom:link href="http://pasjonaci.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pasjonaci.wordpress.com</link>
	<description>Różne ciekawoski z wyżej wymienionych światków</description>
	<lastBuildDate>Sun, 08 Nov 2009 20:19:37 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pasjonaci.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Flex, PHP, jQuery i inne pasje</title>
		<link>http://pasjonaci.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pasjonaci.wordpress.com/osd.xml" title="Flex, PHP, jQuery i inne pasje" />
	<atom:link rel='hub' href='http://pasjonaci.wordpress.com/?pushpress=hub'/>
		<item>
		<title>CustomPreloader we Flexie</title>
		<link>http://pasjonaci.wordpress.com/2009/10/18/custompreloader-we-flexie/</link>
		<comments>http://pasjonaci.wordpress.com/2009/10/18/custompreloader-we-flexie/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 14:10:43 +0000</pubDate>
		<dc:creator>Damian</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[DownloadProgressBar]]></category>
		<category><![CDATA[IPreloaderDisplay]]></category>
		<category><![CDATA[Preloader]]></category>
		<category><![CDATA[Sprite]]></category>

		<guid isPermaLink="false">http://pasjonaci.wordpress.com/?p=11</guid>
		<description><![CDATA[Ostatnio szukałem dużo informacji na temat budowania własnego preloadera we Flexie. Niestety większość z nich to było to samo rozwiązanie, które przedstawię jako pierwsze. Dopiero po kilku godzinach poszukiwań, znalazłem to czego szukałem. Na początek musimy wiedzieć, jakie warunki musi spełniać nasza klasa, żeby mogła być użyta jako preloader. Musi: dziedziczyć po DownloadProgresBar lub implementować [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pasjonaci.wordpress.com&amp;blog=9922724&amp;post=11&amp;subd=pasjonaci&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ostatnio szukałem dużo informacji na temat budowania własnego preloadera we Flexie. Niestety większość z nich to było to samo rozwiązanie, które przedstawię jako pierwsze. Dopiero po kilku godzinach poszukiwań, znalazłem to czego szukałem.</p>
<p>Na początek musimy wiedzieć, jakie warunki musi spełniać nasza klasa, żeby mogła być użyta jako preloader.</p>
<p>Musi:</p>
<ul>
<li>dziedziczyć po DownloadProgresBar lub implementować IPreloaderDisplay</li>
<li>obsługiwać 4 eventy: ProgressEvent.PROGRESS, Event.COMPLETE, FlexEvent.INIT_PROGRESS i FlexEvent.INIT_COMPLETE</li>
<li>zostać ustawiona w kodzie aplikacji jako preloader</li>
</ul>
<p>Aby ustawić własny preloader jako ten domyślny należy dodać go w tagu Application<br />
<pre class="brush: xml;">
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; 
	layout=&quot;absolute&quot; preloader=&quot;loader.MyDownloadProgressBar&quot;&gt;
</pre></p>
<p>Następnie mamy do dyspozycji 2 rozwiązania.<br />
Najprostsze jest takie, żeby stworzyć we Flashu <strong>MovieClip</strong>, najlepiej zawierający 100 klatek, który będzie przedstawiał to co chcemy pokazać w naszym preloaderze.<br />
Później tworzymy twarze dziedziczącą po <strong>DownloadProgressBar</strong>, wczytujemy nasz <strong>MovieClip</strong> i w funkcji obsługującej zdarzenie <strong>ProgressEvent.PROGRESS</strong> dodajemy kod:<br />
<pre class="brush: java;">
private function onProgress( event:ProgressEvent ):void
{
var t:Number = event.bytesTotal;
var l:Number = event.bytesLoaded;
var p:Number = Math.round( (l / t) * 100);
yourMovieClip.preloader.gotoAndStop(p);
}
</pre></p>
<p><a href="http://jessewarden.com/2007/07/making-a-cooler-preloader-in-flex-part-1-of-3.html">Tutaj</a> jest ciekawy opis jak to zrobić.</p>
<p>Ja chciałem zrobić preloader, w którym jest obrazek oraz inne elementy. Nie mogłem więc zrobić prostego preloadera, który zawiera sam obrazek. Powyższe rozwiązanie byłoby dla mnie odpowiednim, gdyby nie jeden szczegół &#8211; nie mam Flasha <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Dlatego też musiałem znaleźć inne rozwiązanie które prezentuje poniżej.</p>
<p><strong>Drugie rozwiązanie</strong> wymaga trochę więcej klepania kodu <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Aby stworzyć preloader, stworzymy klasę, która implementuje <strong>IPreloaderDisplay</strong>, a także dziedziczy po <strong>Sprite</strong>, żebyśmy mogli po niej rysować.<br />
Pozwolę sobie najpierw zaprezentować klasę, którą następnie omówie:<br />
<pre class="brush: java;">
package loader
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.TimerEvent;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import flash.utils.Timer;
import flash.utils.getTimer;&lt;/code&gt;

import mx.effects.Blur;
import mx.effects.Fade;
import mx.events.EffectEvent;
import mx.events.FlexEvent;
import mx.preloaders.IPreloaderDisplay;

public class MyDownloadProgressBar extends Sprite implements IPreloaderDisplay
{
    private var _minimumDuration:Number = 3000;

    private var _IsInitComplete		: Boolean = false;
    private var _timer 				: Timer;

    private var _bytesLoaded 		: uint = 0;
    private var _bytesExpected 		: uint = 1;
    private var _fractionLoaded 	        : Number = 0;
    private var _preloader			: Sprite;

    private var _backgroundColor	: uint = 0x000000;
    private var _stageHeight		: Number = 1;
    private var _stageWidth			: Number = 1;
    private var _loadingBarColour	: uint = 0x000000;
    
    private var _loadingBar 		: Rectangle;
    private var loadingImage 	: flash.display.Loader;
    
    public function MyDownloadProgressBar()
    {
        super();
    }

    public function initialize():void
    {
        drawBackground();

        loadingImage = new flash.display.Loader();
        loadingImage.contentLoaderInfo.addEventListener( Event.COMPLETE, loader_completeHandler);
        loadingImage.load(new URLRequest(&quot;../assets/logos/logo.gif&quot;));
    }

    private function loader_completeHandler(event:Event):void
    {
        addChild(loadingImage);
        loadingImage.alpha = 0.2;
        loadingImage.x = stage.fullScreenWidth / 2 - loadingImage.width / 2;
        loadingImage.y = stage.fullScreenHeight / 3 - loadingImage.height / 2;

        _loadingBar = new Rectangle(loadingImage.x, loadingImage.y - 5, loadingImage.width, 1);

        _timer = new Timer(50);
        _timer.addEventListener(TimerEvent.TIMER, timerHandler);
        _timer.start();
    }

    private function draw():void
    {
        graphics.beginFill( _loadingBarColour , 1);
        graphics.drawRect(_loadingBar.x, _loadingBar.y, _loadingBar.width * _fractionLoaded, _loadingBar.height);
        graphics.endFill();
        loadingImage.alpha = _fractionLoaded + 0.2;
    }

    private function drawBackground():void
    {
        graphics.beginFill( _backgroundColor, 1);
        graphics.drawRect( 0, 0, stageWidth, stageHeight);
        graphics.endFill();
    }

    public function set preloader(value:Sprite):void
    {
        _preloader = value;

        value.addEventListener(ProgressEvent.PROGRESS, progressHandler);
        value.addEventListener(Event.COMPLETE, completeHandler);
        value.addEventListener(FlexEvent.INIT_PROGRESS, initProgressHandler);
        value.addEventListener(FlexEvent.INIT_COMPLETE, initCompleteHandler);
    }

    public function set backgroundAlpha(alpha:Number):void{}
    public function get backgroundAlpha():Number { return 1; }

    public function set backgroundColor(color:uint):void { _backgroundColor = color; }
    public function get backgroundColor():uint { return _backgroundColor; }

    public function set backgroundImage(image:Object):void {}
    public function get backgroundImage():Object { return null; }

    public function set backgroundSize(size:String):void {}
    public function get backgroundSize():String { return &quot;auto&quot;; }

    public function set stageHeight(height:Number):void { _stageHeight = height; }
    public function get stageHeight():Number { return _stageHeight; }

    public function set stageWidth(width:Number):void { _stageWidth = width; }
    public function get stageWidth():Number { return _stageWidth; }

    private function progressHandler(event:ProgressEvent):void
    {
        _bytesLoaded = event.bytesLoaded;
        _bytesExpected = event.bytesTotal;
        _fractionLoaded = Number(_bytesLoaded) / Number(_bytesExpected);
    }

    private function completeHandler(event:Event):void
    {
    }

    private function initProgressHandler(event:Event):void
    {
    }

    private function initCompleteHandler(event:Event):void
    {
        _IsInitComplete = true;
    }

    private function timerHandler(event:Event):void
    {
        if ( _IsInitComplete &amp;amp;&amp;amp; getTimer() &amp;gt; _minimumDuration )
        {
            _timer.stop();
            _timer.removeEventListener(TimerEvent.TIMER,
            var f:Fade = new Fade();
            f.alphaFrom = 1;
            f.alphaTo = 0;
            f.target = this;
            f.duration = 1000;
            f.play();
            f.addEventListener(EffectEvent.EFFECT_END, dispatchComplete);
        }
        else
        {
            draw();
        }
    }

    private function dispatchComplete(event:EffectEvent):void {
        dispatchEvent(new Event(Event.COMPLETE));
    }
}
}
</pre></p>
<p>Na początku w metodzie <strong>initialize()</strong> czyszczę tło oraz wczytuję obrazek, który chcę wyświetlić. Znajduję się on pod adresem: <em>&#8216;../assets/logos/logo.gif&#8217;</em>. Ustawiam również, aby po wczytaniu obrazka wywołała się metoda <strong>loader_completeHandler</strong>.<br />
W niej umieszczam obrazek oraz prostokąt postępu na preloaderze oraz dodaje <strong>Timer</strong>.</p>
<p>W międzyczasie jak aplikacja się wczytuje, to zostaje wywołane zdarzenie ProgressEvent.PROGRESS i zostaje wywołana metoda <strong>progressHandler</strong>, która aktualizuje procent wczytania aplikacji <strong>_fractionLoaded</strong>.</p>
<p>Dlatego co każde 50ms, jak <strong>Timer</strong> kończy odliczanie, preloader jest rysowany na nowo. Jako, że długość prostokąta postępu oraz alpha obrazka jest uzależniona od zmiennej <strong>_fractionLoaded</strong> to mamy wrażenie jakby prostokąt się przesuwał a obrazek pojawiał.</p>
<p>Dopiero jak aplikacja wywoła zdarzenie <strong>FlexEvent.INIT_COMPLETE</strong>, które mówi, że aplikacja została zainicjowana, zmienna <strong>_IsInitComplete</strong> jest ustawiana na True i <strong>Timer</strong> zostaje zatrzymany.</p>
<p>Na koniec jeszcze dodaje efekt <strong>FadeOut</strong><br />
<pre class="brush: java;">
var f:Fade = new Fade();
f.alphaFrom = 1;
f.alphaTo = 0;
f.target = this;
f.duration = 1000;
f.play();
f.addEventListener(EffectEvent.EFFECT_END, dispatchComplete);
</pre><br />
i jak efekt sie skończy to wywołuję metodę <strong>dispatchComplete</strong>, która wywołuje zdarzenie Event.COMPLETE, gdyż jest to wymagane, aby preloader przeniósł nas do załadowanej aplikacji.</p>
<p>Jako, że jest to mój pierwszy dłuższy post, proszę o komentarze nie tylko na temat opisywanego preloadera, ale również stylu pisania postów.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pasjonaci.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pasjonaci.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pasjonaci.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pasjonaci.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pasjonaci.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pasjonaci.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pasjonaci.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pasjonaci.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pasjonaci.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pasjonaci.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pasjonaci.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pasjonaci.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pasjonaci.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pasjonaci.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pasjonaci.wordpress.com&amp;blog=9922724&amp;post=11&amp;subd=pasjonaci&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pasjonaci.wordpress.com/2009/10/18/custompreloader-we-flexie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d475333cb322ca19de7e37fe3f8180b8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Damian</media:title>
		</media:content>
	</item>
		<item>
		<title>Po co?</title>
		<link>http://pasjonaci.wordpress.com/2009/10/13/po-co/</link>
		<comments>http://pasjonaci.wordpress.com/2009/10/13/po-co/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 19:39:10 +0000</pubDate>
		<dc:creator>Damian</dc:creator>
				<category><![CDATA[Inne]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://pasjonaci.wordpress.com/?p=3</guid>
		<description><![CDATA[Wczoraj nudząc się na uczelni zdaliśmy sobie z Piotrkiem sprawę, że mamy wspólne pasje, o których często rozmawiamy. Wpadliśmy więc na pomysł, aby podzielić się nimi z szerszym gronem. Ten blog stworzyliśmy po to, żebyśmy mieli takie miejsce w sieci, w którym będziemy umieszczać różne ciekawostki o Flexie i PHP (a także innych pojęciach), do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pasjonaci.wordpress.com&amp;blog=9922724&amp;post=3&amp;subd=pasjonaci&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wczoraj nudząc się na uczelni zdaliśmy sobie z Piotrkiem sprawę, że mamy wspólne pasje, o których często rozmawiamy. Wpadliśmy więc na pomysł, aby podzielić się nimi z szerszym gronem.</p>
<p>Ten blog stworzyliśmy po to, żebyśmy mieli takie miejsce w sieci, w którym będziemy umieszczać różne ciekawostki o Flexie i PHP (a także innych pojęciach), do których zawsze będziemy mogli wrócić.</p>
<p>Będziemy też dzielić się z Wami naszymi problemami dotyczącymi powyższych tematów, żeby przedyskutować różne możliwości rozwiązania tych problemów.</p>
<p>To chyba tyle tytułem wstępu. Zapraszam.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pasjonaci.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pasjonaci.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pasjonaci.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pasjonaci.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pasjonaci.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pasjonaci.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pasjonaci.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pasjonaci.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pasjonaci.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pasjonaci.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pasjonaci.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pasjonaci.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pasjonaci.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pasjonaci.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pasjonaci.wordpress.com&amp;blog=9922724&amp;post=3&amp;subd=pasjonaci&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pasjonaci.wordpress.com/2009/10/13/po-co/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d475333cb322ca19de7e37fe3f8180b8?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Damian</media:title>
		</media:content>
	</item>
	</channel>
</rss>
