Temat: Fl, AS3 - jak dodac filtr do zdjec w komponencie TileList...
Witam,
sprawa załatwiona :)
może sie komuś przyda efekt z listą obrazków jak na:
http://www.hp.video-foto-studio.pl w zakładce Fotografia.
a oto rozwiązanie:
rozszerzamy klase ImageCell [odpowiedzialna za wyglad elementow TileList]
package comHP.controls.listClasses{
import fl.controls.listClasses.ICellRenderer;
import fl.controls.listClasses.ImageCell;
import fl.controls.TileList;
import fl.managers.StyleManager;
import flash.events.*;
import fl.containers.UILoader;
import flash.display.Loader;
import flash.display.BlendMode;
import flash.filters.ColorMatrixFilter;
public class CustomImageCacheCell extends ImageCell implements ICellRenderer {
private var zrobioneCzB:Boolean=false;
private var aColor:Array=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0];
private var aWhiteBlack:Array=[0.35,0.35,0.35,0,0,0.35,0.35,0.35,0,0,0.35,0.35,0.35,0,0,0,0,0,1,0];
private var colorMat:ColorMatrixFilter=new ColorMatrixFilter(aColor);
private var whiteBlackMat:ColorMatrixFilter=new ColorMatrixFilter(aWhiteBlack);
public function CustomImageCacheCell() {
super();
//skins, umieszczone w pliku .fla jako symbole graficzne
setStyle("upSkin", CustomCellBg);
setStyle("downSkin", CustomCellBg);
setStyle("overSkin", CustomCellBgOver);
setStyle("selectedUpSkin", CustomCellBgSelected);
setStyle("selectedDownSkin", CustomCellBgSelected);
setStyle("selectedOverSkin", CustomCellBgSelected);
setStyle("textOverlayAlpha", 0.4);
override protected function drawLayout():void {
var imagePadding:Number=getStyleValue("imagePadding") as Number;
loader.move(2, 2);//2 pixele na ramke zdjec-elementow TileList-y
var w:Number = width-(imagePadding*2);
var h:Number=height-imagePadding*2;
if (loader.width!=w&&loader.height!=h) {
loader.setSize(w,h);
}
loader.drawNow();
//TUTAJ ROBIMY CZARNO-BIALE ELEMENTY TILELIST NA POCZATEK PO ZALADOWANIU
addEventListener(Event.ENTER_FRAME, zrobCzB);
function zrobCzB(e:Event):void {
if (! zrobioneCzB) {
zrobioneCzB=true;
var ld:UILoader=UILoader(e.target.loader);
ld.filters=[whiteBlackMat];
removeEventListener(Event.ENTER_FRAME, zrobCzB);
}
}
//TUTAJ ROBIMY KOLOROWE ELEMENTY TILELIST PO NAJECHANIU MYSZKA
addEventListener(MouseEvent.ROLL_OVER,zrobKolor);
function zrobKolor(e:MouseEvent):void {
trace("over");
var ld:UILoader=UILoader(e.target.loader);
ld.filters=[colorMat];
removeEventListener(MouseEvent.ROLL_OVER,zrobKolor);
removeEventListener(MouseEvent.ROLL_OUT,zrobCzBZnow);
}
//TUTAJ ROBIMY CZARNO-BIALE ELEMENTY TILELIST NA POCZATEK PO ZJECHANIU KURSORA MYSZKI
addEventListener(MouseEvent.ROLL_OUT,zrobCzBZnow);
function zrobCzBZnow(e:MouseEvent):void {
trace("out");
var ld:UILoader=UILoader(e.target.loader);
ld.filters=[whiteBlackMat];
removeEventListener(MouseEvent.ROLL_OUT,zrobCzBZnow); removeEventListener(MouseEvent.ROLL_OVER,zrobKolor);
}
background.width=width;
background.height=height;
textField.visible = false;
}
A w pliku .fla w którym umieszczamy obiekt tak rozszerzonej klasy piszemy:
import fl.controls.listClasses.ImageCell;
import fl.controls.TileList;
import fl.controls.ScrollBarDirection;
import comHP.controls.listClasses.CustomImageCacheCell;
var tlGalerie:TileList = new TileList ();
tlGalerie.direction=ScrollBarDirection.VERTICAL;
tlGalerie.setStyle("cellRenderer", CustomImageCacheCell);
addChild(tlGalerie);
a w jego bibliotece umieszczamy symbole graficzne ramek zdjec-elementów TileList, które nie beda zmienialy koloru na czarno-bialy:
CustomCellBg CustomCellBgOver oraz CustomCellBgSelected
i dziala.
caly kod zainteresowanym udostepnie [kontakt na priv], ale mysle ze i to sie przyda.
pozdrawiam
kuba