Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   ItemRenderer и броуновское движение... (http://www.flasher.ru/forum/showthread.php?t=173118)

sstotenkopf 23.12.2011 22:47

ItemRenderer и броуновское движение...
 
Добрый вечер... Вообщем встала задача сделать видеочат, я решил реализовать это через datagroup и itemrenderer... ArrayCollection имеет вид {name:имя пользователя, rating:его рейтинг, stream:экземпляр потока})
Скармливаю эти данные itemrenderer таким образом:

Код:

<?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"
                                xmlns:mx="library://ns.adobe.com/flex/mx"
                                autoDrawBackground="true">
               
        <s:BorderContainer id="bc" width="200" height="180" backgroundColor="#DEDEDE"
                                          dropShadowVisible="true" borderVisible="false">
                <mx:UIComponent id="uic" width="200" height="164">
                        <mx:creationComplete>
                                <![CDATA[
                                var video:Video = new Video;
                                video.width = uic.width;
                                video.height = uic.height;
                                uic.addChild(video);
                                if(data.stream == 0){
                                var c:Camera = Camera.getCamera();
                                c.setMode(320,240,30);
                                video.attachCamera(c);       
                                }else{
                                var stream:NetStream = data.stream as NetStream;
                                video.attachNetStream(stream);
                                }
                                ]]>
                        </mx:creationComplete>
                </mx:UIComponent>
                <s:HGroup x="10" y="167" width="44" height="11" verticalAlign="middle">
                        <s:Image width="14" height="13" smooth="true" smoothingQuality="high" source="img/user.png"/>
                        <s:Label color="#005281" depth="1" fontWeight="bold" text="{data.name}"/>
                </s:HGroup>
                <s:HGroup x="144" y="167" width="44" height="11" verticalAlign="middle">
                        <s:Image width="14" height="15" source="img/топ юзеров.PNG"/>
                        <s:Label color="#C1761E" depth="2" fontWeight="bold"
                                        text="{data.rating}" textAlign="right"/>
                </s:HGroup>
        </s:BorderContainer>
</s:ItemRenderer>

Естественно объект data.stream не имеет привязки, в результате чего, со временем перестает совпадать с именем, рейтингом, меняет местоположение, вообщем ведет себя достаточно хаотично, в результате возникает вопрос, как можно использовать здесь привязку, если объект video не имеет аналогов в mxml формате?

Добавлено через 2 часа 4 минуты
нашел такой выход:
Код:

<?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"
                                xmlns:mx="library://ns.adobe.com/flex/mx"
                                autoDrawBackground="true">
               
        <fx:Script>
                <![CDATA[
                        [Bindable]
                        public var stream:NetStream;
                ]]>
        </fx:Script>
        <fx:Binding source="{data.stream}" destination="stream"/>
        <s:BorderContainer id="bc" width="200" height="180" backgroundColor="#DEDEDE"
                                          dropShadowVisible="true" borderVisible="false">
                <mx:UIComponent id="uic" width="200" height="164">
                        <mx:creationComplete>
                                <![CDATA[
                                var video:Video = new Video;
                                video.width = uic.width;
                                video.height = uic.height;
                                uic.addChild(video);
                                if(stream == null){
                                var c:Camera = Camera.getCamera();
                                c.setMode(320,240,30);
                                video.attachCamera(c);       
                                }else{
                                video.attachNetStream(stream);
                                }
                                ]]>
                        </mx:creationComplete>
                </mx:UIComponent>
                <s:HGroup x="10" y="167" width="44" height="11" verticalAlign="middle">
                        <s:Image width="14" height="13" smooth="true" smoothingQuality="high" source="img/user.png"/>
                        <s:Label color="#005281" depth="1" fontWeight="bold" text="{data.name}"/>
                </s:HGroup>
                <s:HGroup x="144" y="167" width="44" height="11" verticalAlign="middle">
                        <s:Image width="14" height="15" source="img/топ юзеров.PNG"/>
                        <s:Label color="#C1761E" depth="2" fontWeight="bold"
                                        text="{data.rating}" textAlign="right"/>
                </s:HGroup>
        </s:BorderContainer>
</s:ItemRenderer>

не уверен, что не криво

wvxvw 24.12.2011 00:52

А если пользователь не разрешил на постоянно камерой пользоваться? Он жеж в приступе агрессии может и бензопилой :)
А вообще, у контролов основанных на List есть вомзможность контролировать создание через свою функцию. itemRendererFunction называется. Эта функция должна создавать или может возвращать закешированый ранее рендерер. Еще вариант - создать пул объектов видео и когда у итем-рендерера случается addedToStage, например, выдавать ему из пула, в зависимости от данных в рендерере.

sstotenkopf 08.01.2012 22:20

Вообщем все равно мой пример глючит, после того как в работающий чат заходят новые пользователи. Почитал про itemRendererFunction нифига не понял, можно пример если не трудно, либо любого другого варианта?


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

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