обменять графические объекты внутри искры ItemRenderer - PullRequest
1 голос
/ 17 января 2011

Я пишу как: ItemRenderer для визуализации некоторых простых графических компонентов в моем приложении.Каждый элемент может иметь несколько форм, которые могут быть выбраны пользователем, т.е. определенный элемент может быть квадратом, или кругом, или звездой, или чем-либо еще.

Самым простым способом, который я мог придумать для этого, было включить все возможные фигуры в виде: Группировать и затем управлять их видимым тегом в зависимости от того, какую фигуру выбрал пользователь.Есть ли лучший способ сделать это?

Кроме того, если я инкапсулирую группу в отдельный компонент MXML, как я могу передать состояние itemRenderer (скажем, "hovered") в компонент MXML, который управляетформы?

спасибо!

f


Отредактировано: вот фрагмент кода, чтобы лучше объяснить ситуацию.Допустим, вы хотите отобразить три типа объектов в качестве альтернативы - приведенный ниже ИК с фрагментом AS, который становится видимым в false для 2 из 3 объектов, определенно делает свое дело, но мне кажется таким уродливым.В то же время я нашел setCurrentState (stateName: String, playTransition: Boolean = true) для распространения состояния вниз, так что это решено.

<s:ItemRenderer>
<s:states>
    <s:State name="normal" />
    <s:State name="hovered" />
</s:states>
<s:Group width="100%">
    <s:Rect width="20" height="10" radiusX="3" radiusY="3">
        <s:stroke>
            <s:SolidColorStroke color="Black" weight="1" pixelHinting="true"/>
        </s:stroke>
        <s:fill>
            <s:SolidColor color="red" />
        </s:fill>
    </s:Rect>
    <s:Rect id="square" width="10" height="10" radiusX="3" radiusY="3">
        <s:stroke>
            <s:SolidColorStroke color="Black" weight="1" pixelHinting="true"/>
        </s:stroke>
        <s:fill>
            <s:SolidColor color="green"/>
        </s:fill>
    </s:Rect>
    <s:Ellipse id="circle" visible="true" width="10" height="10">
        <s:stroke>               
            <s:SolidColorStroke color="Black" pixelHinting="true" weight="1"/>     
        </s:stroke>          
        <s:fill>
            <s:SolidColor color.normal="yellow" color.hovered="0xCEDBEF"/>
        </s:fill>
    </s:Ellipse>
</s:Group>

1 Ответ

1 голос
/ 30 марта 2011

Самым простым способом, который я мог придумать для этого, было включить все возможные фигуры в: Сгруппировать и затем управлять их видимым тегом в зависимости от того, какую фигуру выбрал пользователь.Есть ли лучший способ сделать это?

Да.Средства визуализации предметов должны быть сделаны как можно более легкими.Использовать includeInLayout было бы немного лучше, поскольку он будет добавлять только то, что вам нужно, в список отображения.

Кроме того, если я инкапсулирую группу в отдельный компонент MXML, как мне распространять состояниеitemRenderer (скажем, "завис") до компонента MXML, который управляет формами?

Я не совсем уверен, что понимаю вопрос.Средства визуализации элементов управляются данными, поэтому их экземпляры не имеют надежного состояния.Экземпляры рендерера могут отображать любой данный элемент данных в любой момент времени.Любая информация, передаваемая в средство визуализации элементов, должна передаваться через его элемент данных, иначе вы столкнетесь с ошибками синхронизации на вашем дисплее.

...