ݺߣ

ݺߣShare a Scribd company logo
Автор: Журат М.И.
(для внутреннего использования в ООО «Инним»)
Журат М. - AFramework
 Визуальные компоненты;
 Сервисы (HTTP, Sockets);
 Загрузчики файлов;
 Модели;
 Таски (Tasks);
 Твины/эффекты;
 Менеджеры;
 Утилитные классы и компоненты.
Черный ящик
Вход Выход
 Новый код просто кишит ошибками;
 Высокие трудо- (и время) – затраты;
 Большое количество часто используемых
классов и компонентов;
 Использование общепринятых паттернов
программирования;
 Гибкая и простая архитектура;
 Повышение понимания чужого кода за счет
использования фреймворка.
 Сложный пользовательский интерфейс;
 Производительный код;
 Скорость разработки интерфейса;
 Широкий выбор базовых компонентов;
 Легкая расширяемость и компануемость
визуальных компонентов;
 Поддержка скинирования, лейаутов и
инвалидации.
Журат М. - AFramework
public function set backgroundAlpha(value:Number):void
{
_backgroundAlpha = value;
redraw();
}
public function set backgroundColor(value:uint):void
{
_backgroundColor = value;
redraw();
}
private function redraw():void
{
var g:Graphics = this.graphics;
g.clear();
g.beginFill(_backgroundColor, _backgroundAlpha);
g.drawRect(0, 0, width, height);
}
var rect:Rect = new Rect();
rect.backgroundColor = 0xFF0000;
rect.backgroundAlpha = 0.7;
rect.cornerRadius = 15;
rect.width = 150;
rect.height = 400;
addChild(rect);
public function set backgroundColor(value:uint):void
{
_backgroundColor = value;
_graphicsInvalid = true;
}
public function redraw():void
{
if (_graphicsInvalid)
{
var g:Graphics = this.graphics;
g.clear();
g.beginFill(_backgroundColor,
_backgroundAlpha);
g.drawRect(0, 0, width, height);
}
}
public function set backgroundColor(value:Number):void
{
_backgroundColor = value;
invalidateDisplayList();
}
override protected function
updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
var g:Graphics = this.graphics;
g.clear();
g.beginFill(_backgroundColor, _backgroundAlpha);
g.drawRect(0, 0, width, height);
}
#createChildren();
#commitProperties() -
#invalidateProperties();
#measure() - #invalidateSize();
#updateDisplayList() -
#invalidateDisplayList().
#commitProperties() -
#invalidateProperties();
override protected function commitProperties():void
{
if (_sourceInvalid)
{
if (_untrustedContent)
{
removeChild(_untrustedContent);
_contentLoader
.poolContent(_untrustedContent);
_untrustedContent = null;
}
if (_sourceUrl && _sourceUrl.length > 0)
_contentLoader.load(_sourceUrl,
onContentLoadComplete);
invalidateSize();
invalidateDisplayList();
_sourceInvalid = false;
}
}
#measure() -
#invalidateSize();
 #width/height
 #minWidth/#minHeight
 #maxWidth/#maxHeight
 #explicitWidth/#explicitHeight
 #measuredWidth/#measuredHeight
 #setActualSize
 #contentWidth/#contentHeight
override protected function measure():void
{
if (iconDisplay)
{
var iconWidth:int = iconDisplay.width;
var iconHeight:int = iconDisplay.height;
}
if (labelDisplay)
{
var labelWidth:int = labelDisplay.width;
var labelHeight:int = labelDisplay.height;
}
_measuredWidth = Math.max(_background.width,
iconWidth + labelWidth);
_measuredHeight = Math.max(_background.height,
iconHeight, labelDisplay.height);
}
#updateDisplayList() -
#invalidateDisplayList();
override protected function
updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
var g:Graphics = this.graphics;
g.clear();
DrawUtil.drawCornerButton(g, background, 0, 0,
unscaledWidth);
// иконка
var ty:Number = (unscaledHeight - icon.height) * .5;
DrawUtil.drawSprite(g, list, CommonWindowAsset.COIN_ICON,
HPADDING - 1, ty);
// распологаем надпись
_label.y = (unscaledHeight - _label.height) * .5 - .5;
_label.x = HPADDING + icon.width + HGAP;
}
#currentState -
#onCurrentStateChanged();
Up state
Over state
Down state
Disabled state
Поддержка лейаутов
Обрезка содержимого
Автоизмерение размеров
контейнера
Расположение дочерних
элементов
Виртуализация
Журат М. - AFramework
Журат М. - AFramework
public class AHorizontalLayout extends ALayoutBase
{
override protected function measure ():void
{
for (var i:int = 0;i< target.numChildren;++i)
{
var child:DisplayObject =
target.getChildAt(i);
measuredWidth+= child.width;
measuredHeight = Math.max(
measuredHeight, child.height);
}
}
}
override protected function
updateDisplayList(w:Number, h:Number):void
{
var tx:Number = 0;
for (var i:int = 0;i<target.numChildren;++i)
{
var child:DisplayObject =
target.getChildAt(i);
child.y = 0;
child.x = tx;
tx+= child.width;
}
}
#clipAndEnableScrolling;
#horizontalScrollPosition;
#verticalScrollPosition;
#contentWidth;
#contentHeight.
horizontalScrollPosition,
verticalScrollPosition
0,0
contentWidth
contentHeight
width height
0,0
width
height
Журат М. - AFramework
IDataRenderer (DataRenderer /
ItemRenderer);
IList (ArrayList / ArrayCollection /
PagableArrayCollection);
Бесконечный список (Infinite
list).
Журат М. - AFramework
Журат М. - AFramework
Журат М. - AFramework
ViewPort
(видимая область)
Виртуальные элементы
Виртуальные элементы
Журат М. - AFramework
 Высокий уровень стилизации;
 В качестве скина можно использовать любой
визуальный компонент;
 Низкая связанность;
 Возможность использовать скины отдельно;
 Сокрытие сложности;
 Возможность изменять функциональность
компонента;
 Широкие возможности по отделению бизнес-
логики от визуальной мишуры.
public class UserView extends
ASkinnableComponent
{
public var nameDisplay:IDisplayText;
public var levelDisplay:IDisplayText;
public var scoreDisplay:IDisplayText;
public var
avatarDisplay:AvatarBitmapImage;
//объявление остальных частей скина
override protected function
registerSkinParts():void
{
_skinParts =
{
nameDisplay : false,
levelDisplay : false,
scoreDisplay : false,
avatarDisplay: false
}
}
override protected function partAdded(
partName:String, instance:Object):void
{
super.partAdded(partName, instance);
if (instance === avatarDisplay)
avatarDisplay.sourceUrl =
_source.avatarUrl;
else
if (instance === nameDisplay)
nameDisplay.text = _source.name;
// else
}
override protected function
getCurrentSkinState():String
{
if (!_source)
return
UserViewSkinStates.STATE_EMPTY;
return _source.me ?
UserViewSkinStates.STATE_CURRENT_USER
:
UserViewSkinStates.STATE_USER;
}
override protected function commitProperties():void
{
if (_sourceInvalid)
{
_source.addEventListener(
AModelEvent.MODEL_CHANGED,
onSourceChanged);
if (nameDisplay)
nameDisplay.text = _source.name;
if (levelDisplay)
levelDisplay.text = _source.level;
if (avatarDisplay) avatarDisplay.sourceUrl =
_source.avatarUrl;
if (scoreDisplay)
scoreDisplay.text = _source.score;
}
}
Журат М. - AFramework
Журат М. - AFramework
Журат М. - AFramework
Журат М. - AFramework
Журат М. - AFramework

More Related Content

Viewers also liked (6)

Test and Treat: The Gardner Cascade in Context
Test and Treat: The Gardner Cascade in ContextTest and Treat: The Gardner Cascade in Context
Test and Treat: The Gardner Cascade in Context
Office of HIV Planning
CUARTO GRADO Semana 27CUARTO GRADO Semana 27
CUARTO GRADO Semana 27
Instituto de Ciencias Políticas y Sociales
Dr. martin luther king blueprint
Dr. martin luther king blueprintDr. martin luther king blueprint
Dr. martin luther king blueprint
Janet Ilko
осень 2015
осень 2015осень 2015
осень 2015
19019
CBE16 - water manage your business thru the ebbs and the flows
CBE16 - water manage your business thru the ebbs and the flowsCBE16 - water manage your business thru the ebbs and the flows
CBE16 - water manage your business thru the ebbs and the flows
CraftBev
CBE16 - Funding Sources and Considerations (Fisher)
CBE16 - Funding Sources and Considerations (Fisher)CBE16 - Funding Sources and Considerations (Fisher)
CBE16 - Funding Sources and Considerations (Fisher)
CraftBev
Test and Treat: The Gardner Cascade in Context
Test and Treat: The Gardner Cascade in ContextTest and Treat: The Gardner Cascade in Context
Test and Treat: The Gardner Cascade in Context
Office of HIV Planning
Dr. martin luther king blueprint
Dr. martin luther king blueprintDr. martin luther king blueprint
Dr. martin luther king blueprint
Janet Ilko
осень 2015
осень 2015осень 2015
осень 2015
19019
CBE16 - water manage your business thru the ebbs and the flows
CBE16 - water manage your business thru the ebbs and the flowsCBE16 - water manage your business thru the ebbs and the flows
CBE16 - water manage your business thru the ebbs and the flows
CraftBev
CBE16 - Funding Sources and Considerations (Fisher)
CBE16 - Funding Sources and Considerations (Fisher)CBE16 - Funding Sources and Considerations (Fisher)
CBE16 - Funding Sources and Considerations (Fisher)
CraftBev

Similar to Журат М. - AFramework (20)

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
Andrii Dzynia
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
Technopark
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
Windows Phone 7 Game Development
Windows Phone 7 Game DevelopmentWindows Phone 7 Game Development
Windows Phone 7 Game Development
Sergii Lutai
CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)
Dmitry Evteev
Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)
Ontico
Gwt jug basic
Gwt jug basicGwt jug basic
Gwt jug basic
Alex Tumanoff
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Sergey Platonov
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
ITmozg
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
it-people
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"
IT Event
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
Empatika
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
Andrii Dzynia
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
Technopark
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
Windows Phone 7 Game Development
Windows Phone 7 Game DevelopmentWindows Phone 7 Game Development
Windows Phone 7 Game Development
Sergii Lutai
CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)
Dmitry Evteev
Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)
Ontico
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Sergey Platonov
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
ITmozg
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
it-people
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"
IT Event
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
Empatika

Журат М. - AFramework