Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.12.2011, 18:55
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 1  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
По умолчанию textWidth в spark:Label

Как узнать ширину текста в s:Label ? По аналогии с :
Код AS3:
TextField.textWidth;
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 27.12.2011, 19:47
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
use namespace mx_internal;
...
trace(label.bounds);
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 28.12.2011, 13:04
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 3  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
				use namespace mx_internal;
				trace( this.labelDisplay.bounds.toString() , this.labelDisplay.bounds.left , this.labelDisplay.bounds.size.toString() );
Цитата:
(x=0, y=0, w=NaN, h=NaN) 0 (x=NaN, y=NaN)
Объясню суть задачи, может кто сталкивался... :

При изменении стейта у ListItem на selected, хочу проверять длинну текста и анимировать движение текста по горизонтали (бегущая строка).


Код AS3:
 
<s:State name="selected" enterState="selectedState(event)"/> 
 
private function selectedState(event:FlexEvent):void
			{
				this.timer = new Timer(50);
				this.timer.addEventListener(TimerEvent.TIMER , moveText);
				this.timer.start();			
			}
 
			private function moveText(e:TimerEvent):void
			{
				use namespace mx_internal;
				if(this.moveLeft)
				{
					this.labelDisplay.left.selected--;
					//if(Math.abs(this.labelDisplay.left) > (this.labelDisplay.width - this.labelDisplay.bounds.width
					//Тут нужно знать ширину текста, по аналогии с TextField.textWidth
				}
 
			}
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 28.12.2011, 14:09
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вы в свойство left назначили объект со свойством selected?
bounds будет иметь корректные данные только после creationComplete labelDisplay, при условии что ему был назначен text.
Что из себя представляет ListItem? Приведите его код целиком.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 28.12.2011, 14:29
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 5  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
<s:List itemRenderer="***.view.render.Selection" />
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
					xmlns:s="library://ns.adobe.com/flex/spark">
	<fx:Script>
		<![CDATA[		
			import mx.core.mx_internal;
			import mx.events.FlexEvent;
 
			private var timer:Timer;
			private var moveLeft:Boolean = true;
 
			private function normalState(event:FlexEvent):void
			{
				if(this.timer != null)
				{
					this.timer.removeEventListener(TimerEvent.TIMER , moveText);
					this.timer.stop();
					this.timer = null;
					this.labelDisplay.left = 8;
				}
			}
 
			private function selectedState(event:FlexEvent):void
			{
				this.timer = new Timer(50);
				this.timer.addEventListener(TimerEvent.TIMER , moveText);
				this.timer.start();			
			}
 
			private function moveText(e:TimerEvent):void
			{
				if(this.moveLeft)
				{
					//Тут нужно знать полную ширину текста
					this.labelDisplay.left = String(Number(this.labelDisplay.left) - 4);
					if(Math.abs(Number(this.labelDisplay.left)) > this.labelDisplay.parent.width){
						this.moveLeft = false;
					}
				}else{
					//Тут нужно знать полную ширину текста
					this.labelDisplay.left = String(Number(this.labelDisplay.left) + 4);
					if(Math.abs(Number(this.labelDisplay.left)) > this.labelDisplay.parent.width){
						this.moveLeft = true;
					}
				}
 
			}
 
		]]>
	</fx:Script>
	<s:states> 
		<s:State name="normal" enterState="normalState(event)"/> 
		<s:State name="selected" enterState="selectedState(event)"/> 
	</s:states> 
 
 
	<s:Label id="labelDisplay" left.selected="8" right.selected="8" top.selected="8" bottom.selected="8" fontSize="36" verticalCenter="0"  
			 left.normal="8" right.normal="8" top.normal="8" bottom.normal="8"
			 verticalCenter.normal="0" maxDisplayedLines="1"/>
 
</s:ItemRenderer>
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 28.12.2011, 15:06
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код:
<s:Label id="labelDisplay"
                      x="8"
                      x.normal="8"
                      verticalCenter="0"
                      fontSize="36"   
                      maxDisplayedLines="1"/>
Код AS3:
private function moveText(e:TimerEvent):void
{
	if(this.moveLeft)
	{
		//Тут нужно знать полную ширину текста
		labelDisplay.x -= 4;
		if(labelDisplay.x < (width - labelDisplay.width - 8))
		{
			this.moveLeft = false;
		}
	}
	else
	{
		//Тут нужно знать полную ширину текста
		labelDisplay.x += 4;
		if(labelDisplay.x > 8)
		{
			this.moveLeft = true;
		}
	}
 }
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 28.12.2011 в 16:11.
Старый 28.12.2011, 15:22
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 7  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
1 - this.labelDisplay.x не изменяемое свойство у ItemRenderer
2 - labelDisplay.width - не даст ширину текста, а даст ширину блока в который входит текст

может быть есть способ добраться до TextField'ов? или есть способ просчитать ширину текста зная параметры TextLineMetrics?
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 28.12.2011, 16:09
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 8  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. При чем тут ItemRenderer? x меняется у labelDisplay.
2. При таком подходе ширина labelDisplay будет равна ширине текста + внутренние отступы.

Цитата:
может быть есть способ добраться до TextField'ов?
В spark.controls.Label нет TextField'ов.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 28.12.2011, 16:24
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 9  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Цитата:
1. При чем тут ItemRenderer? x меняется у labelDisplay.
ItemRenderer не даст изменить x у labelDisplay, т.к. фактически labelDisplay не находиться на сцене. Как я понял схему, компонент передает ItemRenderer'у параметры инициализации, тот создает labelDisplay и компонент его клонирует, потом передает другие параметры и т.д.
Цитата:
В spark.controls.Label нет TextField'ов.
ну всмысле TextBlock'и и т.п., вообщем что-то кроме String, но относящееся к тексту
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 28.12.2011, 16:42
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
А попробовать не судьба? Заодно и ошибку бы у меня в формулах нашли, ибо писалось на коленке
Код AS3:
private function moveText(e:TimerEvent):void
{
        if(this.moveLeft)
        {
            labelDisplay.x -= 4;
            if(labelDisplay.x < -labelDisplay.width)
            {
                  this.moveLeft = false;
            }
         }
         else
         {
             labelDisplay.x += 4;
             if(labelDisplay.x > 4)
             {
                 this.moveLeft = true;
             }
          }
}
Добавлено через 11 минут
Цитата:
ItemRenderer не даст изменить x у labelDisplay, т.к. фактически labelDisplay не находиться на сцене. Как я понял схему, компонент передает ItemRenderer'у параметры инициализации, тот создает labelDisplay и компонент его клонирует, потом передает другие параметры и т.д.
Вы заблуждаетесь.

Добавлено через 19 минут
Цитата:
или есть способ просчитать ширину текста зная параметры TextLineMetrics?
Я вам в первом же посте ответил как получить ширину текста. На момент вызова moveText bounds имеет корректные размеры.
__________________
משיח לא בא
משיח גם לא מטלפן

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:35.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.