Просмотр полной версии : TileList + обработка события ошибочной ссылки на изображение
SpetZ_Naz
10.01.2013, 00:21
Здравствуйте!
Сделал простую галерею с выводом изображений из xml-базы в TileList. Изображения находятся на локальном диске. Добавил в DataProvider свои ссылки на изображения. Проблема в том что я не знаю как проверить подлинность ссылки на изображение в следствии чего, если присутствует ошибка в ссылке, то флеш выдает соответствующую ошибку отсутствия изображения.
Есть ли в компоненте TileList'а, событие которое будет адекватно реагировать на ошибки орфографии ссылки и вместо ошибки будет добавлять какое-нибудь дежурное изображение в TileList?
Предчувствую, что у меня примитивный вопрос и ждет ответ типа: повесь слушатель на TileList, который отслеживает IOErrors или что-то подобное. Кое-что пробовал, пытался реализовать и в описании компонента смотрел справочного материала, да и на форумах, но нигде не упоминается об этой (моей) проблеме. Возможно я просто невнимательный. Прошу подсказать. Спасибо.
Привет! Повесь слушатель на рендерер TileList'а, который будет отслеживать IOErrors.
SpetZ_Naz
10.01.2013, 23:33
Нет, к сожалению не понял как повесить слушатель в рендерер TileList'а.
Я использую рендерер взятый от сторонних разработчиков на одном из зарубежных форумов. Кстати, для тех кто ищет решение как вручную придавать стиль ячейкам TileList'а, этот способ вам подойдет:
myForm.TileL.setStyle("cellRenderer", UserListRenderer);//соответственно так я его использую в программе
Вот непосредственно код UserListRenderer.as:
/****
* File: UserListRenderer.as
* Author: design1online.com, LLC
* Date: 9.4.2011
* Purpose: change the formatting for the user tile list
* so images appear beside the user name
****/
package {
import fl.controls.listClasses.ICellRenderer;
import fl.controls.listClasses.ImageCell;
import fl.controls.TileList;
import flash.text.*;
public class UserListRenderer extends ImageCell implements ICellRenderer {
public var desc:TextField = new TextField();
private var textStyle:TextFormat = new TextFormat();
public function UserListRenderer() {
//inherit the variables from the parent
super();
//we don't want to stretch our images to fit the size of the box
loader.scaleContent = false;
//change the cursor as if this was a button
useHandCursor = true;
//Create and format the text field
//that will appear beside the image
desc.autoSize = TextFieldAutoSize.CENTER;
desc.x = 24;
desc.y = 5;
desc.width = 150;
desc.height = 28;
desc.multiline = false;
desc.wordWrap = false;
addChild(desc);
//apply some styles to our text field
setStyle("imagePadding", 2);
textStyle.font = "Tahoma";
textStyle.color = 0xCC3300;
textStyle.size = 15;
}
/**
* Now we override the function that draws the layout
* so we can move the image beside the text
**/
override protected function drawLayout():void {
//adjust the icon for any existing padding
var imagePadding:Number = getStyleValue("imagePadding") as Number;
//offset the image in the box so it's not touching the top of it
loader.move(0, 4);
var w:Number = width-(imagePadding*2);
var h:Number = height-(imagePadding*2);
if (loader.width != w && loader.height != h) {
loader.setSize(w,h);
}
//re-draw the image
loader.drawNow();
//hide the original cellImage textField so we can display our new one later
textField.visible = false;
//display the new text box beside our image
desc.text = data.label;
desc.setTextFormat(textStyle);
//adjust the background
background.width = width;
background.height = height;
}
}
}
Пытался вешать событие на loader, по-идее он перерисовывает, не получилось. Не получилось также словить ошибку инструкцией try/catch.
Подправьте меня пожалуйста. Спасибо.
Выкладываю UserListRenderer.as. Кому нужен, забирайте:
добавьте
/**
* @private (protected)
*/
protected override function handleErrorEvent(event:IOErrorEvent):void {
// загрузите здесь умолчальную картинку
// super.loader.source = 'http://example.com/default.png';
}
SpetZ_Naz
19.01.2013, 01:31
Да, спасибо, то что нужно) Я так понимаю, что если дежурного изображения не будет на месте, то возникнет ошибка загрузки, которую нужно словить через ЛоадИнфо Лоадера или не предусматривать дежурное изображение?
Может быть еще глупее вопрос: можно ли без отлова ошибок загрузки, проверить правильность ссылки на изображение, а не на пустоту из-за ошибки в ссылке?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.