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

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 uamobile
UA Mobile
 
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
 
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 Jquery
Magento Dev
 
Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)
Ontico
 
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 лекция. Разное
Глеб Тарасов
 
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
it-people
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 

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