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

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

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
По умолчанию Как узнать ширину контента у BitmapImage если width=100% и horizontalAline="center"?

Здравствуйте
Есть BitmapImage, которая растягивается на 100 процентов по высоте и ширине

Код AS3:
<s:BitmapImage id="personRightImage"
						   source="@Embed(source='assets/personRight.png')"
						   horizontalAlign="right"
						   verticalAlign="middle"
						   height="100%"
						   width="100%"
						   scaleMode="letterbox"/>
Как мне узнать ширину картинки (контента) после того как она растянулась по ширине и высоте и отцентрировалась вправо ?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
В каком смысле? width/height и будут ширина вашей картинки. То что вы в mxml написали как "100%" будет присвоено в percentWidth/percentHeight компонента. Конечные размеры станут известны после их расчета в layout или в updateDisplayList в вышестоящем компоненте.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Ну, например есть:

Group width="100%" height="100%"
Внутри нее есть BitmapImage height="100%" horizontalAlign="right" verticalAlign="middle" scaleMode="letterbox"
После создания и получения сорса эта битмапа растянется по высоте на 100 процентов, отскейлит свой контент и я хочу получить значение ширины отскейленного контента

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
personRightImage.width
Ну или
Код AS3:
personRightImage.getLayoutBoundsWidth()
В данном случае, как больше нравится.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
не те значения получаются
есть jpeg он по ширине 300 и по высоте 775
Есть группа размером, скажем 500 на 300
В нее положена BitmapImage c этим source (300x775)
Картинка сжалась, верно же ?
Ну а если трейсить width или getLayoutBoundsWidth() у BitmapImage эти значения равны 300 всегда

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Ну так, если первоначальный, приведенный вами код верен, то ширина и будет 300. Вы же выставили width="100%" для BitmapImage.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 05.08.2012, 18:34
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 7  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
width=100% убрал, ширина в трэйсе так и осталась 300.
Ну а все же, даже есть и не убирать приравнивание ширины ко 100 процентам, как узнать ширину содержимого отскейленой BitmapData ?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Посмотрите measuredWidth/measuredHeight.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
нет, эти переменные возвращают 300 тоже
Сделал так:
Код AS3:
package components
{
	import spark.components.Image;
 
	public class ExtendedImage extends Image
	{
		public function ExtendedImage()
		{
			super();
		}
 
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
		{
			super.updateDisplayList(unscaledWidth, unscaledHeight);
			graphics.clear();
			graphics.lineStyle(1,0xff0000,1);
			graphics.drawRect(0,0,unscaledWidth,unscaledHeight);
		}
 
		[Bindable(event="scaledWidthChanged")]
		public function get scaledWidth():Number
		{
			var num:Number = this.width;
 
			if (scaleMode == "letterbox")
			{
				try
				{
					if ( (width > 0) && (sourceWidth < sourceHeight) )
					{
						num = (sourceWidth/sourceHeight) * height;                       
					}                   
				}
				catch(e:Error)
				{
					num = this.width;
				}
			}
 
			return num;
		}
	}
}
Знать ширину растянутой картинки мне нужно было чтобы в разных стэйтах эти картинки прилипали или к правому краю экрана или к левому. То есть если стэйт "normal" -левая картинка слева, правая справа, если стэйт "leftPerson" - правая остается справа, левая приезжает к правому краю стэйджа, если стэйт "rightPerson" - левая слева, а правая приезжает влево

Код AS3:
<s:states>
		<s:State name="normal"/>
		<s:State name="leftPerson"/>
		<s:State name="rightPerson"/>
	</s:states>
 
	<fx:Script>
		<![CDATA[
 
			[Bindable]
			protected var leftPersonX:Number=0;
 
			[Bindable]
			protected var rightPersonX:Number=0;
 
			override protected function stateChanged(oldState:String, newState:String, recursive:Boolean):void
			{
				super.stateChanged(oldState, newState, recursive);
				//leftPersonRight-=(personLeftImage.width-personLeftImage.scaledWidth);
 
				try
				{
					switch(newState)
					{
						case "normal":
							leftPersonX=0;
							rightPersonX=stage.stageWidth-personRightImage.width;
							break;
						case "leftPerson":
							personLeftImage.depth=1;
							personRightImage.depth=0;
							leftPersonX=stage.stageWidth-personLeftImage.scaledWidth;
							rightPersonX=stage.stageWidth-personRightImage.width;
							break;
						case "rightPerson":
							personLeftImage.depth=0;
							personRightImage.depth=1;
							leftPersonX=0;
							rightPersonX=-Math.abs((personRightImage.scaledWidth-personRightImage.width));
							break;
					}
				}
				catch(error:Error)
				{
				}
				trace(newState+"  leftPersonX="+leftPersonX);
			}
		]]>
	</fx:Script>
 
 
	<s:Group width="100%" height="100%">
		<components:ExtendedImage id="personLeftImage" 
						  x="{leftPersonX}"
						  source="@Embed(source='assets/personLeft.png')"
						  horizontalAlign="left"
						  verticalAlign="middle"
						  height="100%"
						  scaleMode="letterbox"
						  moveEffect="Move"/>
 
		<components:ExtendedImage id="personRightImage" 
				 		x="{rightPersonX}"
					   source="@Embed(source='assets/personRight.png')"
					   horizontalAlign="right"
					   verticalAlign="middle"
					   height="100%"
					   scaleMode="letterbox"
					   moveEffect="Move"/>
	</s:Group>
	<s:HGroup width="100%" bottom="0">
		<s:Button label="left" click="{currentState='leftPerson'}"/>
		<s:Button label="normal" click="{currentState='normal'}"/>
		<s:Button label="right" click="{{currentState='rightPerson'}}"/>
	</s:HGroup>

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
<s:states>
    <s:State name="normal"/>
    <s:State name="rightPerson"/>
    <s:State name="leftPerson"/>
</s:states>
 
<s:Group width="100%" height="100%">
	<s:Image id="leftImage"
			 height="100%"
			 width="100%"
			 horizontalAlign.normal="left"
			 horizontalAlign.rightPerson="left"
			 horizontalAlign.leftPerson="right"
			 depth.leftPerson="1"
			 depth.rightPerson="0"
			 source="@Embed(source='assets/personLeft.png')"/>
	<s:Image id="rightImage"
			 height="100%"
			 width="100%"
			 horizontalAlign.normal="right"
			 horizontalAlign.leftPerson="right"
			 horizontalAlign.rightPerson="left"
			 depth.leftPerson="0"
			 depth.rightPerson="1"
			 source="@Embed(source='assets/personRight.png')"/>
</s:Group>
 
<s:HGroup 
    width="100%"
    bottom="0">
    <s:Button 
        label="left"
        click="{currentState='leftPerson'}"/>
    <s:Button 
        label="normal"
        click="{currentState='normal'}"/>
    <s:Button 
        label="right"
        click="{{currentState='rightPerson'}}"/>
</s:HGroup>
Добавлено через 36 минут
Или так, если нужна анимация:
Код AS3:
<s:states>
    <s:State name="normal"/>
    <s:State name="rightPerson"/>
    <s:State name="leftPerson"/>
</s:states>
 
<s:transitions>
	<s:Transition toState="normal">
		<s:Sequence>
			<s:SetAction target="{leftImage}" property="right"/>
			<s:SetAction target="{rightImage}" property="left"/>
			<s:Parallel>
				<s:Move target="{leftImage}" xTo="0"/>
				<s:Move target="{rightImage}" xTo="{container.width - rightImage.width}"/>
			</s:Parallel>
			<s:SetAction target="{leftImage}" property="left"/>
			<s:SetAction target="{rightImage}" property="right"/>
		</s:Sequence>
	</s:Transition>
	<s:Transition toState="leftPerson">
		<s:Sequence>
			<s:SetAction target="{leftImage}" property="left"/>
			<s:SetAction target="{rightImage}" property="left"/>
			<s:Parallel>
				<s:Move target="{leftImage}" xTo="{container.width - leftImage.width}"/>
				<s:Move target="{rightImage}" xTo="{container.width - rightImage.width}"/>
			</s:Parallel>
			<s:SetAction target="{leftImage}" property="right"/>
			<s:SetAction target="{rightImage}" property="right"/>
		</s:Sequence>
	</s:Transition>
	<s:Transition toState="rightPerson">
		<s:Sequence>
			<s:SetAction target="{leftImage}" property="right"/>
			<s:SetAction target="{rightImage}" property="right"/>
			<s:Parallel>
				<s:Move target="{leftImage}" xTo="0"/>
				<s:Move target="{rightImage}" xTo="0"/>
			</s:Parallel>
			<s:SetAction target="{leftImage}" property="left"/>
			<s:SetAction target="{rightImage}" property="left"/>
		</s:Sequence>
	</s:Transition>
</s:transitions>
 
<s:Group id="container" width="100%" height="100%">
	<s:Image id="leftImage"
			 height="100%"
			 left.normal="0"
			 left.rightPerson="0"
			 right.leftPerson="0"
			 depth.leftPerson="1"
			 depth.rightPerson="0"
			 source="@Embed(source='assets/personLeft.png')"/>
	<s:Image id="rightImage"
			 height="100%"
			 right.normal="0"
			 right.leftPerson="0"
			 left.rightPerson="0"
			 depth.leftPerson="0"
			 depth.rightPerson="1"
			 source="@Embed(source='assets/personRight.png')"/>
</s:Group>
__________________
משיח לא בא
משיח גם לא מטלפן


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

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

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


 


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


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