Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-11-2008, 14:37   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Progressbar

Hi,

ich wieder... Kurze Frage:

Würde gerne die Progressbar als Preloader für meine Bilder benutzen. Habe mir das Beispiel der Doku angeschaut (getestet) und einige weitere über google gefunden. Alles funtzt!

Die Frage ist nun, wieso mein Script nicht funktioniert:

PHP-Code:
private function progressListener(event:ProgressEvent):void
            
{                
                var 
_prozent:Number = (Math.floor(event.bytesLoaded event.bytesTotal 100));
                
_progressBar.direction ProgressBarDirection.RIGHT
                trace
_prozent );
                
_progressBar.setProgress(_prozent_progressBar.maximum);
            } 
Das trace arbeitet wunderbar. (Die Bar erstellen tue ich voher)

Gruß, Nico
Nico B. ist offline   Mit Zitat antworten
Alt 13-11-2008, 14:42   #2 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.839
das maximum hast du aber schon 100 gesetzt denn der default ist 0
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Alt 13-11-2008, 14:43   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Hi, nein hatte ich nicht

Habs es jetzt nochmal gemacht und getestet = Kein Erfolg. Auch wenn ich direkt 100 reinschreibe passiert nix.
Nico B. ist offline   Mit Zitat antworten
Alt 13-11-2008, 14:49   #4 (permalink)
Neuer User
 
Registriert seit: May 2006
Ort: Bad Ischl, Österreich
Beiträge: 243
Versuchs einmal mit Klammernsetzen:
ActionScript:
  1. var _prozent:Number = (Math.floor((event.bytesLoaded / event.bytesTotal) * 100));
__________________
Die Praxis steht über der Theorie - die Theorie ist nur eine Schlussfolgerung aus der Praxis!

warappa.wordpress.com
Warappa ist offline   Mit Zitat antworten
Alt 13-11-2008, 14:54   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Zitat:
Zitat von Warappa Beitrag anzeigen
Versuchs einmal mit Klammernsetzen:
ActionScript:
  1. var _prozent:Number = (Math.floor((event.bytesLoaded / event.bytesTotal) * 100));


Kein Erfolg. :/
Nico B. ist offline   Mit Zitat antworten
Alt 13-11-2008, 14:56   #6 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.839
Mal ne blöde Gegenfrage, da es bei Flex ja keine Funktion "streaming simulieren" gibt
Wie testest du die Progressbar?
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Alt 13-11-2008, 14:57   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Hm, das ist eine gute Frage...

Der Trace gibt grob 7 Werte zurück, sprich ich sollte doch irgendwas sehen auf der Progressbar, oder?
Zudem, wenn der Ladebalken fertig wäre, müsste doch alles ausgefüllt sein, oder?
Nico B. ist offline   Mit Zitat antworten
Alt 13-11-2008, 15:06   #8 (permalink)
Neuer User
 
Registriert seit: May 2006
Ort: Bad Ischl, Österreich
Beiträge: 243
Kannst du mal die Trace-Werte hier rein kopieren (nur aus interesse)?
__________________
Die Praxis steht über der Theorie - die Theorie ist nur eine Schlussfolgerung aus der Praxis!

warappa.wordpress.com
Warappa ist offline   Mit Zitat antworten
Alt 13-11-2008, 15:18   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Hier die traces:

0
8
16
25
33
42
50
58
67
75
84
92
100

Edit:
Ich meine zur Not, baue ich mir eben schnell selbst ne Bar als Sprite... Würde aber schon gerne wissen, woran es liegt.

Hier mal die ganze Klasse, vielleicht habe ich voher was dummes falsch gemacht:


PHP-Code:
package de.nicobarelmann.files
{
    
import caurina.transitions.Tweener;
    
    
import flash.events.ErrorEvent;
    
import flash.events.Event;
    
import flash.events.EventDispatcher;
    
import flash.events.IEventDispatcher;
    
import flash.events.MouseEvent;
    
import flash.events.ProgressEvent;
    
    
import mx.containers.Canvas;
    
import mx.controls.Alert;
    
import mx.controls.Button;
    
import mx.controls.ProgressBar;
    
import mx.controls.ProgressBarDirection;

    public class 
ControlGalerie extends EventDispatcher
    
{
        private var 
_fileController:ControlFiles = new ControlFiles();
        private var 
_imageArray:Array = new Array();
        private var 
i:int 0;    
        private var 
_image:ImageFile;
        private var 
_progressBar:ProgressBar;
        
        private var 
container:Canvas;
        private var 
dataButton:Button;
        private var 
folderButton:Button;
        
            
        public function 
ControlGalerie(_container:Canvas_dataButton:Button_folderButton:Buttontarget:IEventDispatcher=null)
        {
            
container _container;
            
dataButton _dataButton;
            
folderButton _folderButton;
            
            
            
super(target);
            
init();
        }            
                    
            private function  
init():void
            
{
                
_fileController.addEventListener(ControlFiles.READY_TO_SHOWreadyToShowImages);
                
_fileController.init(dataButtonfolderButton );
            }
            
            private function 
readyToShowImages(event:Event):void
            
{
                
_imageArray.push_fileController.imageFile );
                
showImages();
            }
            
            private function 
showImages():void
            
{
                for( 
i_imageArray.lengthi++)
                {
                    
// ---- Create new Image Instance -----
                    
var _filePath:String _imageArray[i].nativePath;
                    
_image = new ImageFile();    
                    
_image.maintainAspectRatio false;    
                    
_image.buttonMode true;
                    
_image.mouseChildren false;            
                    
                    
// ---- Image Listener ---- 
                    
_image.addEventListener(Event.COMPLETEcompleteListener);
                    
_image.addEventListener(ProgressEvent.PROGRESSprogressListener);
                    
_image.addEventListener(ErrorEvent.ERRORerrorListener);        
                    
// Mouse //            
                    
_image.addEventListener(MouseEvent.MOUSE_DOWN,     startListener);
                    
_image.addEventListener(MouseEvent.MOUSE_UP,     stopListener);
                    
                    
// ---- Placement of the Image ----                    
                    
_image.10 + ( (5) * 140);
                    
_image.100 + ( Math.floor5) * 140);
                    
                    
// ---- Vars ----
                    
_image.xstartPosition _image.x;
                    
_image.ystartPosition _image.y;
                    
_image.startWidth _image.width;
                    
_image.startHeight _image.height;
                    
                    
// ---- Progressbar ------
                    
_progressBar = new ProgressBar();
                    
_progressBar.10 + ( (5) * 140);
                    
_progressBar.100 + ( Math.floor5) * 140);
                    
container.addChild_progressBar );                    
                    
// ---- Set the Source of the Image and add it to the "stage" ----
                    
_image.source _filePath;
                    
container.addChild(_image);
                }
            }            
            
// ---- Result Handler ------------------------------------------------------------------------------        
            
private function completeListener(event:Event):void
            
{                
                var 
_img:ImageFile ImageFile(event.target);
                
_img.height 100;
                
_img.width     100;
                
_image.alpha 0;
                
Tweener.addTween(_image, { alpha:1.5time:} );
            }            
            
            private function 
progressListener(event:ProgressEvent):void
            
{                
                var 
_prozent:Number = (Math.floor((event.bytesLoaded event.bytesTotal) * 100)); 
                
_progressBar.direction ProgressBarDirection.RIGHT
                trace
_prozent );
                
_progressBar.maximum 100;
                
_progressBar.setProgress(_prozent_progressBar.maximum);
            }
            
            private function 
errorListener():void
            
{
                
Alert.show("Error");
            }
            
    
// ---- Drag And Drop Logic ----------------------------------------------------------------------
            
private function startListener(event:MouseEvent):void
            
{
                if ( !
Tweener.isTweening(event.target) )
                {
                    
event.target.startDrag();
                }
            }
            
            private function 
stopListener(event:MouseEvent):void
            
{
                
event.target.stopDrag();
                
Tweener.addTweenevent.target, {time0.5x:event.target.xstartPositiony:event.target.ystartPosition } );
            }
    }


Geändert von Nico B. (13-11-2008 um 15:19 Uhr)
Nico B. ist offline   Mit Zitat antworten
Alt 13-11-2008, 15:34   #10 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.839
Also diese Minimalimplementation läuft im debugger problemlos allerdings wird, debuggerbedingt halt nichts neu gezeichnet und dargestellt.
PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:ProgressBar id="progBar" minimum="0" maximum="100" width="200" height="20"/>
    <mx:Image source="test.jpg" progress="onProgress(event)"  y="47"/>
    <mx:Script>
        <![CDATA[
            private function onProgress(pe:ProgressEvent):void{
                
                var prozent:Number = Math.floor(pe.bytesLoaded/pe.bytesTotal*100);
                progBar.setProgress(prozent, 100);
                
            }            
        ]]>
    </mx:Script>
</mx:Application>
EDIT:
Kommando zurück setProgress wird nicht ausgeführt
PHP-Code:
public function setProgress(value:Numbertotal:Number):void
    
{
        if (
_mode == ProgressBarMode.MANUAL)
            
_setProgress(valuetotal);
    } 
Hast du deine Anwendung mal online getestet?
__________________
mfg Frank

Geändert von mildesign (13-11-2008 um 15:43 Uhr)
mildesign ist offline   Mit Zitat antworten
Alt 13-11-2008, 15:39   #11 (permalink)
Neuer User
 
Registriert seit: May 2006
Ort: Bad Ischl, Österreich
Beiträge: 243
Ich glaub ich habs:
Soweit ich das sehe, gibst du jedem Bild eine eigene ProgressBar. Du überschreibst aber jedes mal wenn du eine weitere ProgressBar erzeugst die _progressBar Eigenschaft -> jedes Event greift auf die selbe Progressbar zu, das kann nicht gutgehen.

Du muss zum ImageFile auch die Referenz zur zugeordneten ProgressBar speichern, evt. direkt in ImageFile als Eigenschaft progressBar. Der Handler könnte dann so ausschaun:
ActionScript:
  1. private function progressListener(event:ProgressEvent):void
  2. {               
  3.         var imgFile:ImageFile=event.target as ImageFile;
  4.         var progBar:ProgressBar = imgFile.progressBar;
  5.         var _prozent:Number = (Math.floor((event.bytesLoaded / event.bytesTotal) * 100));
  6.         progBar.direction = ProgressBarDirection.RIGHT
  7.         trace( _prozent );
  8.         progBar.maximum = 100;
  9.         progBar.setProgress(_prozent, progBar.maximum);
  10. }

...und oben müsstest du schreiben:
ActionScript:
  1. ...
  2. _progressBar = new ProgressBar();
  3. _progressBar.x = 10 + ( (i % 5) * 140);
  4. _progressBar.y = 100 + ( Math.floor( i / 5) * 140);
  5. container.addChild( _progressBar )
  6. _image.progressBar=_progressBar;
  7. ...

Konnte es leider nicht testen, sollte aber funktionieren...
__________________
Die Praxis steht über der Theorie - die Theorie ist nur eine Schlussfolgerung aus der Praxis!

warappa.wordpress.com
Warappa ist offline   Mit Zitat antworten
Alt 13-11-2008, 15:53   #12 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Sers,

leider kein Ergebnis.

Hab's jetzt mal nach Deinem Beispiel gemacht:

PHP-Code:
package de.nicobarelmann.script.files
{
    
import caurina.transitions.Tweener;
    
    
import flash.events.ErrorEvent;
    
import flash.events.Event;
    
import flash.events.EventDispatcher;
    
import flash.events.IEventDispatcher;
    
import flash.events.MouseEvent;
    
import flash.events.ProgressEvent;
    
    
import mx.containers.Canvas;
    
import mx.controls.Alert;
    
import mx.controls.Button;
    
import mx.controls.ProgressBar;
    
import mx.controls.ProgressBarDirection;

    public class 
ControlGalerie extends EventDispatcher
    
{
        private var 
_fileController:ControlFiles = new ControlFiles();
        private var 
_imageArray:Array = new Array();
        private var 
i:int 0;    
        private var 
_image:ImageFile;
        private var 
_progressBar:ProgressBar;
        
        private var 
container:Canvas;
        private var 
dataButton:Button;
        private var 
folderButton:Button;
        
            
        public function 
ControlGalerie(_container:Canvas_dataButton:Button_folderButton:Buttontarget:IEventDispatcher=null)
        {
            
container _container;
            
dataButton _dataButton;
            
folderButton _folderButton;
            
            
            
super(target);
            
init();
        }            
                    
            private function  
init():void
            
{
                
_fileController.addEventListener(ControlFiles.READY_TO_SHOWreadyToShowImages);
                
_fileController.init(dataButtonfolderButton );
            }
            
            private function 
readyToShowImages(event:Event):void
            
{
                
_imageArray.push_fileController.imageFile );
                
showImages();
            }
            
            private function 
showImages():void
            
{
                for( 
i_imageArray.lengthi++)
                {
                    
// ---- Create new Image Instance -----
                    
var _filePath:String _imageArray[i].nativePath;
                    
_image = new ImageFile();    
                    
_image.maintainAspectRatio false;    
                    
_image.buttonMode true;
                    
_image.mouseChildren false;            
                    
                    
// ---- Image Listener ---- 
                    
_image.addEventListener(Event.COMPLETEcompleteListener);
                    
_image.addEventListener(ProgressEvent.PROGRESSprogressListener);
                    
_image.addEventListener(ErrorEvent.ERRORerrorListener);        
                    
// Mouse //            
                    
_image.addEventListener(MouseEvent.MOUSE_DOWN,     startListener);
                    
_image.addEventListener(MouseEvent.MOUSE_UP,     stopListener);
                    
                    
// ---- Placement of the Image ----                    
                    
_image.10 + ( (5) * 140);
                    
_image.100 + ( Math.floor5) * 140);
                    
                    
// ---- Vars ----
                    
_image.xstartPosition _image.x;
                    
_image.ystartPosition _image.y;
                    
_image.startWidth _image.width;
                    
_image.startHeight _image.height;
                    
                    
// ---- Progressbar ------
                    
_progressBar = new ProgressBar();
                    
_progressBar.10 + ( (5) * 140);
                    
_progressBar.100 + ( Math.floor5) * 140);
                    
container.addChild_progressBar );                
                    
_image.progressBar _progressBar;    
                    
// ---- Set the Source of the Image and add it to the "stage" ----
                    
_image.source _filePath;
                    
container.addChild(_image);
                }
            }            
            
// ---- Result Handler ------------------------------------------------------------------------------        
            
private function completeListener(event:Event):void
            
{                
                var 
_img:ImageFile ImageFile(event.target);
                
_img.height 100;
                
_img.width     100;
                
_image.alpha 0;
                
Tweener.addTween(_image, { alpha:1.5time:} );
            }            
            
            private function 
progressListener(event:ProgressEvent):void
            
{                
                var 
imgFile:ImageFile event.target as ImageFile;
                var 
progBar:ProgressBar imgFile.progressBar;
                var 
_prozent:Number = (Math.floor((event.bytesLoaded event.bytesTotal) * 100));
                
progBar.direction ProgressBarDirection.RIGHT
                progBar
.maximum 100;
                   
progBar.setProgress(_prozentprogBar.maximum);
        
                
//_progressBar.direction = ProgressBarDirection.RIGHT
                //_progressBar.maximum = 100;
                //_progressBar.setProgress(_prozent, _progressBar.maximum);
            
}
            
            private function 
errorListener():void
            
{
                
Alert.show("Error");
            }
            
    
// ---- Drag And Drop Logic ----------------------------------------------------------------------
            
private function startListener(event:MouseEvent):void
            
{
                if ( !
Tweener.isTweening(event.target) )
                {
                    
event.target.startDrag();
                }
            }
            
            private function 
stopListener(event:MouseEvent):void
            
{
                
event.target.stopDrag();
                
Tweener.addTweenevent.target, {time0.5x:event.target.xstartPositiony:event.target.ystartPosition } );
            }
    }

Wenn ich mich nirgends vertippt habe - leider auch keine Lösung.




@mildesign:
Da es eine Air-Anwendung ist, kann ich es Online nicht testen. Aber auch ein kleiner Flex-Only Prototyp wollte nicht laufen.
Nico B. ist offline   Mit Zitat antworten
Alt 13-11-2008, 16:19   #13 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
Aber das Progress Event wird über dein ImageFile dispatched, oder?

btw. warum machst du:
ActionScript:
  1. var _prozent:Number = (Math.floor((event.bytesLoaded / event.bytesTotal) * 100));
  2. progBar.direction = ProgressBarDirection.RIGHT
  3. progBar.maximum = 100;
  4. progBar.setProgress(_prozent, progBar.maximum);

Die setProgress Funktion ist dafür da, dass man die Prozente nicht ausrechnen muss:
ActionScript:
  1. progBar.setProgress(event.bytesLoaded, event.bytesTotal);

Übrigens sollte es auch einmal reichen, die direction festzulegen.
pokepika ist offline   Mit Zitat antworten
Alt 13-11-2008, 17:05   #14 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Zitat:
Zitat von pokepika Beitrag anzeigen
Aber das Progress Event wird über dein ImageFile dispatched, oder?

btw. warum machst du:
ActionScript:
  1. var _prozent:Number = (Math.floor((event.bytesLoaded / event.bytesTotal) * 100));
  2. progBar.direction = ProgressBarDirection.RIGHT
  3. progBar.maximum = 100;
  4. progBar.setProgress(_prozent, progBar.maximum);

Die setProgress Funktion ist dafür da, dass man die Prozente nicht ausrechnen muss:
ActionScript:
  1. progBar.setProgress(event.bytesLoaded, event.bytesTotal);

Übrigens sollte es auch einmal reichen, die direction festzulegen.


Beides mal geändert, funktionieren tut es trotzdem nicht. Aber da es eigentlich eher Schönheitsdinge sind, wohl kein Wunder.

In der ImageKlasse direkt pasiert nix, also auch kein Dispatch. Aber die Wert des Traces und Co sind ja auch zu 100% in Ordnung.

Geändert von Nico B. (13-11-2008 um 17:11 Uhr)
Nico B. ist offline   Mit Zitat antworten
Alt 13-11-2008, 19:36   #15 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.839
Zitat:
mode property

mode:String [read-write]

Specifies the method used to update the bar. Use one of the following values in MXML:

event The control specified by the source property must dispatch progress and completed events. The ProgressBar control uses these events to update its status. The ProgressBar control only updates if the value of the source property extends the EventDispatcher class.
polled The source property must specify an object that exposes bytesLoaded and bytesTotal properties. The ProgressBar control calls these methods to update its status.
manual You manually update the ProgressBar status. In this mode you specify the maximum and minimum properties and use the setProgress() property method to specify the status. This mode is often used when the indeterminate property is true.
In ActionScript, you can use use the following constants to set this property: ProgressBarMode.EVENT, ProgressBarMode.POLLED, and ProgressBarMode.MANUAL.


The default value is ProgressBarMode.EVENT.
setzt also einfach die source auf dein image und du kannst dir das eventhandling sparen
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele