responsive/flexible mobile ui controls for Feathers
a Feather/Starling extension of responsive/flexible ui controls and general mobile
framework.
simply fork or download the project, you can also download the binary itself and link it
to your project, or import to your IDE of choice such as Flash Builder 4.7
. We supportStarling 1.6
and Feathers 2
and at least version 15 of Adobe AIR SDK
is recommended.
Hendrix GfxManager
and a content manager for managing assets packages. seamless textureHendrix Collection
for standard data structures.Bidirectional Bitmap fonts
.Every component is a FlexComp
object, every flexible component has the following
properties:
percentWidth
- the width percentage of the control based on it’s parent( or relativeCalcWidthParent
) percentHeight
- the height percentage of the control based on it’s parent( or relativeCalcHeightParent
) top, bottom, left, right
- the margin in exact pixelstopPercentHeight, bottomPercentHeight
- the margin based on percentages of parent height leftPercentWidth, rightPercentWidth
- the margin based on percentages of parent widthhorizontalCenter
- how far is the control from being centered horizontallyverticalCenter
- how far is the control from being centered verticallyrelativeCalcWidthParent
- you can change the parent on which percentage based layoutrelativeCalcHeightParent
- you can change the parent on which percentage based layouthorizontalAlign
, verticalAlign
- layout property for children layout alignmentisSensitiveToParent
- should the control be sensitive to his parent changesid
- identifierbackgroundSkin
- a skin for backgrounda drawer with two number pickers. the layout is done automatically. saves ton of
layout code that usually goes into draw()
method
override protected function initialize():void
{
var hgTimer: HGroup = new HGroup();
var nPicker1: NumberPicker = new NumberPicker();
var nPicker2: NumberPicker = new NumberPicker();
var img: FlexImage = new FlexImage();
var drawerTime: PullDrawer = new PullDrawer();
hgTimer.gapPercentWidth = 0;
hgTimer.percentWidth = 99;
hgTimer.percentHeight = 20;
hgTimer.horizontalCenter = 0;
hgTimer.horizontalAlign = HorizontalLayout.HORIZONTAL_ALIGN_CENTER;
hgTimer.verticalAlign = VerticalLayout.VERTICAL_ALIGN_MIDDLE;
nPicker1.buttonMinus = CompsFactory.newButton(SColors.PURPLE, SColors.PURPLE, null, null, null,false,"main::ssMain.icon_minus",true,"center",true) as FlexButton;
nPicker1.buttonPlus = CompsFactory.newButton(SColors.PURPLE, SColors.PURPLE, null, null, null,false,"main::ssMain.icon_Add",true,"center",true) as FlexButton;
nPicker1.buttonPercentHeight = 0.25;
nPicker1.maxRange = 24;
nPicker1.onChange = numberPicker_onChange;
nPicker2.buttonMinus = CompsFactory.newButton(SColors.PURPLE, SColors.PURPLE, null, null, null,false,"main::ssMain.icon_minus",true,"center",true) as FlexButton;
nPicker2.buttonPlus = CompsFactory.newButton(SColors.PURPLE, SColors.PURPLE, null, null, null,false,"main::ssMain.icon_Add",true,"center",true) as FlexButton;
nPicker2.buttonPercentHeight = 0.25;
nPicker2.maxRange = 60;
nPicker2.onChange = numberPicker_onChange;
img.source = "main::ssMain.icon_:";
img.percentHeight = 50;
img.scaleMode = FlexImage.SCALEMODE_LETTERBOX;
hgTimer.addChild(nPicker1);
hgTimer.addChild(img);
hgTimer.addChild(nPicker2);
// Drawer Timer
drawerTime.mainContent = new Quad(1,1,SColors.TILE_GREY,false);
drawerTime.drawerContent = hgTimer;
drawerTime.horizontalAlign = HorizontalLayout.HORIZONTAL_ALIGN_CENTER;
drawerTime.drawerContentPercentWidth = 100;
drawerTime.toggleDrawer()
addChild(drawerTime)
}
loading packages.
for complete usage learning of the GfxManager
, consult it’s own repository, or the source
private function loadGfxPacks():void
{
gfxManager = GfxManager.instance;
var mrpMain: GfxPackage = gfxManager.addOrGetContentPackage("main") as GfxPackage;
mrpMain.loadTexturesAutomatically = true;
mrpMain.enqueue("assets/packages/general/spinner.png", "spinner", LocalResource.TYPE_BITMAP);
// texture atlas
mrpMain.enqueue("assets/packages/main/ssMain.png", "ssMain", LocalResource.TYPE_BITMAP);
mrpMain.enqueue("assets/packages/main/ssMain.xml", "ssMainXML", LocalResource.TYPE_XML);
// texture atlas
mrpMain.enqueue("assets/packages/main/quickIcons.png", "quickIcons");
mrpMain.enqueue("assets/packages/main/quickIcons.xml", "quickIconsXML");
var mrpAvatarSelect:GfxPackage = gfxManager.addOrGetContentPackage("avatar") as GfxPackage;
mrpAvatarSelect.loadTexturesAutomatically = true;
mrpAvatarSelect.enqueue("assets/packages/avatarSelection/sprite.png", "sprite");
mrpAvatarSelect.enqueue("assets/packages/avatarSelection/sprite.xml", "spriteXML");
gfxManager.loadPackages("*", onGfxLoaded);
}
private function onGfxLoaded($obj:Object = null):void
{
ready();
var img:FlexImage = new FlexImage();
img.source = "main::ssMain.icon_love";
var btn:FlexButton = CompsFactory.newButton("avatar::sprite.btn_down", "avatar::sprite.btn_up", btnDate_onTriggered, null, null, false, null, true) as FlexButton;
}
public function startSplash(flashSpriteParent:flash.display.DisplayObjectContainer):void
{
_appSplash = new BitmapLayersComposer(flashSpriteParent);
_appSplash.dataProvider = Vector.<Object>([
{id:"1", src: SEmbeddedAssets.bm_splash_BG_, percentWidth: 100, percentHeight: 100, scaleMode: BitmapLayersComposer.SCALEMODE_STRECTH, bottom: NaN, top:NaN, left:NaN ,right:NaN, horizontalCenter:0, verticalCenter:0},
{id:"2", src: "app/logos/bm_splash_logo1.png", percentWidth: 75, percentHeight: 100, scaleMode: BitmapLayersComposer.SCALEMODE_LETTERBOX, bottom: NaN, top:NaN, left:NaN ,right:NaN, horizontalCenter:0, verticalCenter:-40},
{id:"3", src: "app/logos/bm_splash_logo2.png", percentWidth: 60, percentHeight: NaN, scaleMode: BitmapLayersComposer.SCALEMODE_LETTERBOX, bottom: 44, top:NaN, left:NaN ,right:NaN, horizontalCenter:0, verticalCenter:NaN}
]);
_appSplash.start();
}
a full set of core flexible components
FlexLabel
resizes font size according to width/height.FlexImage
supports three scale modes STRECTH, LETTERBOX, ZOOMFlexButton
resizes both default icon and font’s size.FlexQuad
- flex version of QuadFlexList
- flex version of ListFlexTextInput
- flex version of TextInputDynamicTextInput
- a realtime dynamic font sizing textinput to fit text in a framea set of layout flexible components
ActionBar
a very lite Action Bar component packed with flex featuresHGroup
robust horizontal layoutVGroup
robust vertical layoutFlexTabBar
a tab barFlexTabBarC
another version of tab bara set of dialog flexible components
DatePickerDialog
date picker dialogTimePickerDialog
time picker dialogDateAndTimePickerDialog
date and time picker dialogDialog
general dialog with provided contentWarningDialog
a warning dialogPopupLoader
a dialog with loader animationa set of extended flexible components
PullDrawer
- a drawer componentDatePicker
a date picker componentTimePicker
a time picker componentZoomContainer
a zoomable spriteNumberPicker
a number picker componentAnimatedControl
a copntainer that can perform vertical toggle aniamtionFlexPageIndicator
flex page indicationSnapList
a list that snaps its closest item to the centerLabelList
a vertical snap list of numbersMagnifyList
a horizontal snap list that magnifies it’s contentLazyList
lazy image listMainWindow
a main window with navigatorHamMainWindow
a main window with hamburger drawerAudioNote
an audio recording componentBitmapLayersComposer
flash based image composer, works with a data provider withBidiTextField
Bidirectional Text field with bitmap fonts. based on another repository i have publishedTLFLabel
Bidirectional Image text label based on Adobe TLF
.HitButton
a flex button with a definable Polygon hit area.DragHitButton
a draggable button with ability to register objects for drop on and events.MovieClipButton
a flex button with MovieClip
skin and sound and events.a set of widgets
ListUpdateWidget
- a widget that hooks to a list to augment it with pull to refresh feature. SimpleLoader
- a simple rotating imagedata tech
ImageStreamer
- use HTTP to ask for images, cache them, and get notified when they arriveSQLSerialData
- a humble SQL lite ORM wrapper over serialized data structureutilities