![]() |
|
||||||||||
|
|||||
|
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
use namespace mx_internal; trace( this.labelDisplay.bounds.toString() , this.labelDisplay.bounds.left , this.labelDisplay.bounds.size.toString() ); Цитата:
При изменении стейта у ListItem на selected, хочу проверять длинну текста и анимировать движение текста по горизонтали (бегущая строка). <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. |
|
|||||
|
Вы в свойство left назначили объект со свойством selected?
bounds будет иметь корректные данные только после creationComplete labelDisplay, при условии что ему был назначен text. Что из себя представляет ListItem? Приведите его код целиком.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
<?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. |
|
|||||
<s:Label id="labelDisplay"
x="8"
x.normal="8"
verticalCenter="0"
fontSize="36"
maxDisplayedLines="1"/>
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. |
|
|||||
|
1 - this.labelDisplay.x не изменяемое свойство у ItemRenderer
2 - labelDisplay.width - не даст ширину текста, а даст ширину блока в который входит текст может быть есть способ добраться до TextField'ов? или есть способ просчитать ширину текста зная параметры TextLineMetrics?
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
1. При чем тут ItemRenderer? x меняется у labelDisplay.
2. При таком подходе ширина labelDisplay будет равна ширине текста + внутренние отступы. Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Цитата:
Цитата:
![]()
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
А попробовать не судьба? Заодно и ошибку бы у меня в формулах нашли, ибо писалось на коленке
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; } } } Цитата:
Добавлено через 19 минут Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|