![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте
Есть BitmapImage, которая растягивается на 100 процентов по высоте и ширине Как мне узнать ширину картинки (контента) после того как она растянулась по ширине и высоте и отцентрировалась вправо ? |
|
|||||
|
В каком смысле? width/height и будут ширина вашей картинки. То что вы в mxml написали как "100%" будет присвоено в percentWidth/percentHeight компонента. Конечные размеры станут известны после их расчета в layout или в updateDisplayList в вышестоящем компоненте.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Ну, например есть:
Group width="100%" height="100%" Внутри нее есть BitmapImage height="100%" horizontalAlign="right" verticalAlign="middle" scaleMode="letterbox" После создания и получения сорса эта битмапа растянется по высоте на 100 процентов, отскейлит свой контент и я хочу получить значение ширины отскейленного контента |
|
|||||
|
не те значения получаются
есть jpeg он по ширине 300 и по высоте 775 Есть группа размером, скажем 500 на 300 В нее положена BitmapImage c этим source (300x775) Картинка сжалась, верно же ? Ну а если трейсить width или getLayoutBoundsWidth() у BitmapImage эти значения равны 300 всегда |
|
|||||
|
width=100% убрал, ширина в трэйсе так и осталась 300.
Ну а все же, даже есть и не убирать приравнивание ширины ко 100 процентам, как узнать ширину содержимого отскейленой BitmapData ? |
|
|||||
|
нет, эти переменные возвращают 300 тоже
Сделал так: 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; } } } <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> |
|
|||||
Или так, если нужна анимация:
__________________
משיח לא בא משיח גם לא מטלפן Последний раз редактировалось alatar; 06.08.2012 в 12:47. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:40. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|