exprize
11.09.2009, 15:09
Люди, нужна помощь специалистов.
Проблема такая:
Есть dataGrid в который динамически загружаются картинки через ImageCellRenderer.
Так вот картинки загружаются нормально, но когда щёлкаешь по какой-нибудь из них, сверху должна появляться зелёная плёнка, типо выбрал, но её нет.... Она за картинками получается... Может кто сталкивался? Как это исправить???
Пока что решил проблему методом _alpha=75 у всех картинок, но из-за этого они все тусклые стали... Зато зелёную плёнку видно над картинкой.
Поможете разобраться?
Вот код который использую:
ImageCellRenderer.as:
import mx.data.encoders.Num;
import mx.utils.Delegate;
class ImageCellRenderer extends MovieClip
{
private var image : MovieClip;
private var imageLoader : MovieClipLoader;
private var loadListener : Object;
private var listOwner : MovieClip;
private var getCellIndex : Function;
private var getDataLabel : Function;
private var url:String;
private static var PREFERRED_HEIGHT : Number = 130;
private static var PREFERRED_WIDTH : Number = 130;
public function ImageCellRenderer()
{
image = createEmptyMovieClip('image', getNextHighestDepth());
image._alpha = 75;//ВОТ ТУТ ДЕЛАЮ ПРОЗРАЧНОСТЬ!
imageLoader = new MovieClipLoader();
loadListener = new Object();
imageLoader.addListener(loadListener);
loadListener.onLoadInit = Delegate.create(this, setSize);
}
public function setSize(w:Number, h:Number):Void
{
image._y = (image._height/2) - 2
}
function setValue(str:String, item:Object, sel:Boolean):Void {
image._visible = (item[getDataLabel()] != undefined);
if(item[getDataLabel()] != this.url){
image.loadMovie(item[getDataLabel()]);
this.onEnterFrame = function(){
if(image.getBytesLoaded() >= image.getBytesTotal() && image.getBytesTotal() > 4 && image._width > 4){
this.url = item[getDataLabel()]
delete this.onEnterFrame;
}
}
}
}
public function getPreferredHeight() : Number
{
return PREFERRED_HEIGHT;
}
public function getPreferredWidth() : Number
{
return PREFERRED_WIDTH;
}
}
Flash.fla:
dataProvider.getPhotos(ID, Album , function(success:Boolean)
{
if (success) if (this.firstChild.nodeName=='response')
{
EventDispatcher.initialize(Select_Present);
Kolvo_fotok.text=this.firstChild.childNodes.length;
Fotos_Array = new Array();
for (var i:Number = 0; i<this.firstChild.childNodes.length; i++)
{
Fotos_Array[i]=({data: this.firstChild.childNodes[i].childNodes[3].firstChild.nodeValue}, {url: this.firstChild.childNodes[i].childNodes[3].firstChild.nodeValue});
}
Select_Foto.dataProvider = Presents_Array;
Select_Foto.getColumnAt(0).cellRenderer = "ImageCellRenderer";
Select_Foto.getColumnAt(0).width = 130;
Select_Foto.rowHeight = 130;
Select_Foto.selectable = true;
Select_Foto.showHeaders = false;
Select_Foto.change = function(evt:Object) {
select_item = Select_Foto.selectedItem.url;
}
Select_Foto.addEventListener("change", Select_Foto);
}
else ex_error_text.text="<b>Ошибка: Необходимо разрешить приложению доступ к фотографиям.</b>";
else ex_error_text.text="<b>Ошибка: Нет соединения с сервером.</b>";
});
Спасибо.
Проблема такая:
Есть dataGrid в который динамически загружаются картинки через ImageCellRenderer.
Так вот картинки загружаются нормально, но когда щёлкаешь по какой-нибудь из них, сверху должна появляться зелёная плёнка, типо выбрал, но её нет.... Она за картинками получается... Может кто сталкивался? Как это исправить???
Пока что решил проблему методом _alpha=75 у всех картинок, но из-за этого они все тусклые стали... Зато зелёную плёнку видно над картинкой.
Поможете разобраться?
Вот код который использую:
ImageCellRenderer.as:
import mx.data.encoders.Num;
import mx.utils.Delegate;
class ImageCellRenderer extends MovieClip
{
private var image : MovieClip;
private var imageLoader : MovieClipLoader;
private var loadListener : Object;
private var listOwner : MovieClip;
private var getCellIndex : Function;
private var getDataLabel : Function;
private var url:String;
private static var PREFERRED_HEIGHT : Number = 130;
private static var PREFERRED_WIDTH : Number = 130;
public function ImageCellRenderer()
{
image = createEmptyMovieClip('image', getNextHighestDepth());
image._alpha = 75;//ВОТ ТУТ ДЕЛАЮ ПРОЗРАЧНОСТЬ!
imageLoader = new MovieClipLoader();
loadListener = new Object();
imageLoader.addListener(loadListener);
loadListener.onLoadInit = Delegate.create(this, setSize);
}
public function setSize(w:Number, h:Number):Void
{
image._y = (image._height/2) - 2
}
function setValue(str:String, item:Object, sel:Boolean):Void {
image._visible = (item[getDataLabel()] != undefined);
if(item[getDataLabel()] != this.url){
image.loadMovie(item[getDataLabel()]);
this.onEnterFrame = function(){
if(image.getBytesLoaded() >= image.getBytesTotal() && image.getBytesTotal() > 4 && image._width > 4){
this.url = item[getDataLabel()]
delete this.onEnterFrame;
}
}
}
}
public function getPreferredHeight() : Number
{
return PREFERRED_HEIGHT;
}
public function getPreferredWidth() : Number
{
return PREFERRED_WIDTH;
}
}
Flash.fla:
dataProvider.getPhotos(ID, Album , function(success:Boolean)
{
if (success) if (this.firstChild.nodeName=='response')
{
EventDispatcher.initialize(Select_Present);
Kolvo_fotok.text=this.firstChild.childNodes.length;
Fotos_Array = new Array();
for (var i:Number = 0; i<this.firstChild.childNodes.length; i++)
{
Fotos_Array[i]=({data: this.firstChild.childNodes[i].childNodes[3].firstChild.nodeValue}, {url: this.firstChild.childNodes[i].childNodes[3].firstChild.nodeValue});
}
Select_Foto.dataProvider = Presents_Array;
Select_Foto.getColumnAt(0).cellRenderer = "ImageCellRenderer";
Select_Foto.getColumnAt(0).width = 130;
Select_Foto.rowHeight = 130;
Select_Foto.selectable = true;
Select_Foto.showHeaders = false;
Select_Foto.change = function(evt:Object) {
select_item = Select_Foto.selectedItem.url;
}
Select_Foto.addEventListener("change", Select_Foto);
}
else ex_error_text.text="<b>Ошибка: Необходимо разрешить приложению доступ к фотографиям.</b>";
else ex_error_text.text="<b>Ошибка: Нет соединения с сервером.</b>";
});
Спасибо.