SlideShare a Scribd company logo
1 of 47
Автор: Журат М.И.
(для внутреннего использования в ООО «Инним»)
 Визуальные компоненты;
 Сервисы (HTTP, Sockets);
 Загрузчики файлов;
 Модели;
 Таски (Tasks);
 Твины/эффекты;
 Менеджеры;
 Утилитные классы и компоненты.
Черный ящик
Вход Выход
 Новый код просто кишит ошибками;
 Высокие трудо- (и время) – затраты;
 Большое количество часто используемых
классов и компонентов;
 Использование общепринятых паттернов
программирования;
 Гибкая и простая архитектура;
 Повышение понимания чужого кода за счет
использования фреймворка.
 Сложный пользовательский интерфейс;
 Производительный код;
 Скорость разработки интерфейса;
 Широкий выбор базовых компонентов;
 Легкая расширяемость и компануемость
визуальных компонентов;
 Поддержка скинирования, лейаутов и
инвалидации.
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
Поддержка лейаутов
Обрезка содержимого
Автоизмерение размеров
контейнера
Расположение дочерних
элементов
Виртуализация
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
IDataRenderer (DataRenderer /
ItemRenderer);
IList (ArrayList / ArrayCollection /
PagableArrayCollection);
Бесконечный список (Infinite
list).
ViewPort
(видимая область)
Виртуальные элементы
Виртуальные элементы
 Высокий уровень стилизации;
 В качестве скина можно использовать любой
визуальный компонент;
 Низкая связанность;
 Возможность использовать скины отдельно;
 Сокрытие сложности;
 Возможность изменять функциональность
компонента;
 Широкие возможности по отделению бизнес-
логики от визуальной мишуры.
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

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 ContextOffice of HIV Planning
 
Dr. martin luther king blueprint
Dr. martin luther king blueprintDr. martin luther king blueprint
Dr. martin luther king blueprintJanet Ilko
 
осень 2015
осень 2015осень 2015
осень 201519019
 
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 flowsCraftBev
 
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
 

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
 
CUARTO GRADO Semana 27
CUARTO GRADO Semana 27CUARTO GRADO Semana 27
CUARTO GRADO Semana 27
 
Dr. martin luther king blueprint
Dr. martin luther king blueprintDr. martin luther king blueprint
Dr. martin luther king blueprint
 
осень 2015
осень 2015осень 2015
осень 2015
 
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
 
CBE16 - Funding Sources and Considerations (Fisher)
CBE16 - Funding Sources and Considerations (Fisher)CBE16 - Funding Sources and Considerations (Fisher)
CBE16 - Funding Sources and Considerations (Fisher)
 

Similar to Журат М. - AFramework

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 
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_samsonovComputer Science Club
 
Windows Phone 7 Game Development
Windows Phone 7 Game DevelopmentWindows Phone 7 Game Development
Windows Phone 7 Game DevelopmentSergii Lutai
 
CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)Dmitry Evteev
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 
Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Ontico
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
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 введение в технологию, КПИ #ITmeetingKPITimur 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 #3Empatika
 

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

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 
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
 
Windows Phone 7 Game Development
Windows Phone 7 Game DevelopmentWindows Phone 7 Game Development
Windows Phone 7 Game Development
 
CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)CC HackQuest 2010 Full Disclosure (мастер-класс)
CC HackQuest 2010 Full Disclosure (мастер-класс)
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 
Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)
 
Gwt jug basic
Gwt jug basicGwt jug basic
Gwt jug basic
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
 
Школа-Студия разработки приложений для 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”
 
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
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"
 
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
 

Журат М. - AFramework