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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.09.2010, 12:09
im4LF вне форума Посмотреть профиль Отправить личное сообщение для im4LF Найти все сообщения от im4LF
  № 1  
Ответить с цитированием
im4LF

Регистрация: Apr 2010
Сообщений: 19
Question TabBar skin

Есть сложность создания скина для закладок.
На картинки показана проблема:


Подскажите способ реализации подобного.
Пока на ум пришло только перекрывать метод рисования верхнего бордера у NavigatorContent... Может есть более простые способы?


Последний раз редактировалось im4LF; 09.09.2010 в 12:26.
Старый 09.09.2010, 17:53
Bond007 вне форума Посмотреть профиль Отправить личное сообщение для Bond007 Найти все сообщения от Bond007
  № 2  
Ответить с цитированием
Bond007

Регистрация: Mar 2010
Сообщений: 100
На самом деле это не так просто сделать, точнее, объяснить не получится.
У вас шаблон в векторе ?

Можете скинуть свой шаблон, я попытаюсь сделать, это как вариант.

Старый 09.09.2010, 21:47
im4LF вне форума Посмотреть профиль Отправить личное сообщение для im4LF Найти все сообщения от im4LF
  № 3  
Ответить с цитированием
im4LF

Регистрация: Apr 2010
Сообщений: 19
Bond007, доброго времни суток.
К сожалению у меня растр.
Скин для табов рисовал с помощью <s:Rect ... radiusX="6">

Может что-то скинуть другое? Проблема стоит довольно остро.
Спасибо.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
В скине проверьте, скорее всего ваш бордер просто перекрывается, либо выложите код скина.

Старый 10.09.2010, 01:04
im4LF вне форума Посмотреть профиль Отправить личное сообщение для im4LF Найти все сообщения от im4LF
  № 5  
Ответить с цитированием
im4LF

Регистрация: Apr 2010
Сообщений: 19
Код:
Код AS3:
<mx:ViewStack id="myViewStack" width="100%" bottom="0" top="25"> 
    <s:NavigatorContent id="search" label="Search" skinClass="TabSkin" visible="false"> 
        <s:Label text="Search Screen"/> 
    </s:NavigatorContent> 
 
    <s:NavigatorContent id="custInfo" label="Customer Info" skinClass="TabSkin"> 
        <s:Label text="Customer Info"/> 
    </s:NavigatorContent>
</mx:ViewStack>
<s:TabBar dataProvider="{myViewStack}" skinClass="skins.TestTabBarSkin" styleName="title-level2" height="24" left="0" />
TabBar:
Код AS3:
<s:Skin ...>
    <!-- host component -->
    ...    
    <!-- states -->
    ...
    <s:DataGroup id="dataGroup" width="100%" height="100%">
        <s:layout>
            <s:ButtonBarHorizontalLayout gap="1"/>
        </s:layout>
        <s:itemRenderer>
            <fx:Component>
                <s:ButtonBarButton skinClass="skins.TabBarButtonSkin" />
            </fx:Component>
        </s:itemRenderer>
    </s:DataGroup>
</s:Skin>
TabBarButton:
Код AS3:
<s:SparkSkin ...>
    <!-- host component -->
    ...    
    <!-- states -->
    ...
    <!-- up -->
    <s:Rect top="0" left="0" right="0" bottom="0" topLeftRadiusX="6" topRightRadiusX="6" includeIn="up">
        <s:fill>
            <s:LinearGradient rotation="90">
                <s:GradientEntry color="#00abed"/>
                <s:GradientEntry color="#006abc"/>
            </s:LinearGradient>
        </s:fill>
        <s:stroke>
            <s:SolidColorStroke color="#00aef0"/>
        </s:stroke>
    </s:Rect>
 
    <!-- selected -->
    <s:Rect id="selectedStates" top="0" left="0" right="0" bottom="-2" topLeftRadiusX="6" topRightRadiusX="6" includeIn="selectedStates, overStates">
        <s:fill>
            <s:SolidColor color="#000000" alpha="0.5" />
        </s:fill>
    </s:Rect>
 
    <s:Label ...>...</s:Label>
</s:SparkSkin>
Tab:
Код AS3:
<s:Skin ...>
    <!-- host component -->
    ...    
    <!-- states -->
    ...
    <!-- полупрозрачный tab -->
    <s:Rect left="0" right="0" top="0" bottom="0" radiusX="6" topLeftRadiusX="0">
        <s:fill>
            <s:SolidColor color="#000000" alpha="0.5" />
        </s:fill>
        <s:stroke>
            <s:SolidColorStroke color="#ff0000" alpha="1" />
        </s:stroke>
    </s:Rect>
 
    <s:Group ...>...</s:Group>
 
</s:Skin>
Вся проблема в том что если делать выделенную кнопку полупрозрачной (как это нарисовано на макете) то под этой кнопкой просвечивается бордер самого таба:

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Похоже я вас неправильно понял в первый раз. Если вам нужно сделать так что бы бордюр не был виден, то вариантов всего три.
1. Отказаться от прозрачности, т.е. сделать псевдопрозрачность (фон ставится в скин элементов управления).
2. Отказаться от бордюра, или переписать метод рисования бордюра у контейнера.
3. Имитировать бордюр фильтрами (затратно для процессора, контур вокруг всего элемента управления)

Добавлено через 4 минуты
P.S. Есть еще один вариант, рисовать бордюр отдельно, опираясь на координаты и положения контейнера и табов (под табом я понимаю TabButton)

Старый 10.09.2010, 01:24
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 7  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Ну или рисовать border с пробелом, или можно его стирать (BlendMode.ERASE у стриающего элемента, BlendMode.LAYER у контейнера, который с border'ом). Муторно, конечно

Старый 10.09.2010, 08:09
im4LF вне форума Посмотреть профиль Отправить личное сообщение для im4LF Найти все сообщения от im4LF
  № 8  
Ответить с цитированием
im4LF

Регистрация: Apr 2010
Сообщений: 19
alatar, фон к сожалению делать в скине нельзя, пока сделан градиент от черного к прозрачному который закрывает артефакт - но смотрится конечно плохо.

fljot, в доке написано что "This process requires that the blendMode property of the parent display object be set to flash.display.BlendMode.LAYER" (BlendMode.ERASE) - но viewstack не является parent'ом для TabBar.

Попробовал в скине
Tab:
Код AS3:
<s:Rect blendMode="layer" ...
а для TabBarButton:
Код AS3:
<!-- selected -->
    <s:Rect blendMode="erase" ...
Но эффекта нет (как и ожидалось) - у выделенной кнопки просто пропадает Rect, а бордер у таба не исчезает...

Может что-то надо в коде перестроить?
Или сделать обернуть ViewStack и TabBar в контейнер с тем самым бордером и кнопке делать erase уже... Попробую...

Добавлено через 2 часа 2 минуты
Помог совет fljot, добавить только обший контейнер надо для бордера:
Код:
Код AS3:
<s:SkinnableContainer blendMode="layer" ... skinClass="skins.TabBorder">
	<mx:ViewStack ...>...</mx:ViewStack>
	<s:TabBar ... />
</s:SkinnableContainer>
skins.TabBorder:
Код AS3:
<s:Rect left="0" right="0" top="25" bottom="0" radiusX="6" topLeftRadiusX="0">
	<s:stroke>
		<s:SolidColorStroke color="#ffffff" alpha="0.3" />
	</s:stroke>
</s:Rect>
skins.TabBarButtunSkin:
Код AS3:
<!-- черная плашка затирающия под собой все -->
<s:Rect blendMode="erase" top="0" left="0" right="0" bottom="-2" topLeftRadiusX="6" topRightRadiusX="6" includeIn="selectedStates, overStates">
	<s:fill>
		<s:SolidColor color="#000000" />
	</s:fill>
</s:Rect>
Все вроде неплохо. Только компонент обрастает лишним контейнером.
И есть еще одна небольшая проблема - у выделенной кнопки должен быть бордер - но только на left, top, right сторонах.

Подскажите как задать s:stroke только на нужных сторонах, или исключить его на bottom?


Последний раз редактировалось im4LF; 10.09.2010 в 08:15.
Старый 10.09.2010, 13:37
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 9  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Я вообще-то думал эту затиралку добавить во ViewStack) и LAYER задавать ViewStack'у же

Старый 10.09.2010, 14:31
im4LF вне форума Посмотреть профиль Отправить личное сообщение для im4LF Найти все сообщения от im4LF
  № 10  
Ответить с цитированием
im4LF

Регистрация: Apr 2010
Сообщений: 19
А какому элементу blendMode="erase" и как определять его ширину?
Небольшой пример, если можно?

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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