Tricks for tween on mobile devices with Flash Platform

In this quick post I’d like to share with you my experience about Tween on Flash Platform projects delivered on a mobile devices.
I started work on mobile since Flash Lite 1.1 so I grew up with mobile, I lived all the Flash mobile evolution and now, on tablet and smartphone, I had some good tricks to share with you, I really hope that those tips could help you during your developer life.
OK, let’s start:

  • Use quality property of stage
    This is a really good technique to use when you have to improve performance of your project, when you need to make a fluid tween before launch it, set stage quality to low and when tween will finish set stage quality to high or best.
    Avoid to use this technique when you have vectors (textfield for example) on the stage because you could have a worst result.
  • Use cacheAsBitmap and cacheAsBitmapMatrix
    If you have vector object that you’d like to animate in your project remember to cache them and then animate; remember also to set your application with GPU acceleration and you can see a really good performance with this technique.
    Avoid to cache objects that you need to remove from display list, it will be so expensive for your memory.
  • System.gc() works!
    I tried in few sample to use it on Android and I saw a good result, so the “old” tip to call System.gc() twice in a try/catch statement works on mobile device too (only on AIR apps)
  • Take care with multiple animations on iPad and iPhone
    On iOS devices we don’t have AIR runtime so LLVM translate our AIR project for us in Native Binary so it could help if you move few objects per time in particular if you have big objects to move like a background or something like that
  • Greensocks tweens are the best
    I tried tweener and other tween libraries for AS3, but the best one for me are the Greensock tween library, in particular on iOS devices.
  • Last but not least, remember to test your animation on the device because you could see “funny” results
    Sometimes happen that on your computer everything works well but when you port your content on a tablet or smartphone everything works not so well.
    Before hurt your head, remember to test a lots of times your mobile content on the device, it could save your projects!
Finally I suggest to take a look at dev center mobile development zone of Adobe site because you can find many tutorials and helpful tips on mobile development.
That’s all folks for now, I hope you enjoy those tips.

Flash Camp Milan review

Yesterday in Milan we had the Flash Camp about Mobile topics and then we had the Flash Camp Party at NH Hotel… really wonderful time.
Like you know, in Italy it’s not so easy to organize those kind of events because usually people don’t move to another city like other foreign countries but Flash Camp had a great success.
This camp was organized in the same place of WhyMCA the mobile revolution, an italian conference focused on mobile topics.
We had 50/60 people per session and I’m glad to say that my session had 80 people so I’m happy about this little success.
All the sessions surfed in deep about CG, design patterns, video optimization for mobile, flex on mobile and so on, so I was really excited to take part in this event.
My session was about Design Pattern for Mobile, I talked about 3 design patterns: Singleton, Observer and Presentation Model.
With a couple of samples (that you can download from this link) and few slides I made an application that run with the same base code on tablet and smartphone; this is an hot topic now on mobile world in particular on Flash Platform side.

In next few weeks I’ll make a post about Presentation Model to share my thoughts about this argument and how to use it in your project , but if you want to start with this topic, take a look at this great post on RIArockstars.

Finally I’d like to thanks the Flash Mind, Adobe Flash Platform User Group Italy, to give me this opportunity, WhyMCA staff for the amazing organization, other speakers of Flash Camp for great time spent together and people that came to talk with us during the Flash Camp and to the beer party too.
I leave also a link to some photos took during Flash Camp in Milan.

Flex on mobile: first impressions…

Like you know I love work with mobile and embedded stuff, in particular I love working with Flash Platform on mobile devices.
In latest months I worked on Android and iOS with Flash Professional but in latest weeks I started to work with Flex HERO sdk.
I love so much work with Flex but on mobile I’ve never tried yet.
First impression is that work with Flex on mobile stuff is quite fast respect Flash because it adds a lots of usual features that a mobile application needs.

Splash page

Any mobile application that is called like that, needs a splash page to introduce the real application.
In Flex you can set it very easily directly in main MXML file.
The executable MXML file on mobile project is called ViewNavigatorApplication instead of WindowedApplication like every AIR application, this new class allow you to set splashScreenImage, splashScreenScaleMode and splashScreenMinimumDisplayTime.
Those properties allow you to choose an image file for the splash screen, set its minimum duration and finally how it works in each screen’s dimensions where application runs.

Views

I mention ViewNavigatorApplication, this is a new concept of Flex mobile applications, in fact each application is composed by different View components.
Views are so interesting because they have a lots of things pre-builted like ActionBar, activation and deactivation events, View title, caching data and so on.
Every view is managed by a navigator, with the navigator you can push or pop views (like an array) to change them.
You can also choose how they will be animated, by default you can see a simple slide left or right (depends if you are adding or removing a view).
ActionBar is a new interesting component composed by 3 elements:

  • navigationContent
  • titleContent
  • actionContent

Usually actionBar could be used like a context menu of the view, remember that on mobile development is necessary to go back in the previous mask and also remember that your user doesn’t work on an application like uses a desktop application so shortcuts are so important.

Mobile Components

The new Flex framework “Hero” added optimized components for mobile purpose.
Until now I worked with textinputs, labels and lists that works very well, I tried in 3 different Android phones and performance are quite good.
Another new component added is IconItemRenderer that is an optimized item renderer for list component for example.
This component could be customized with: title, message field, icon and a decorator class that allow you to add for example another image. This is an IconItemRenderer sample where I added also filters (a drop shadow in this case)

Device Interaction & Flex Performance

Another cool thing that allow you to save time is that back button on the smartphone is managed by the application and it automatically goes to the previous view when a user click on hit.
In my few samples I tried to work without using cacheAsBitmap and cacheAsBitmapMatrix to have better performance and believe me that you remain astonished by the performance.
In fact performance are so good, it is so optimized for mobile purpose and everything works well, I tried to add custom effects and filters but performance were amazing too.

Mobile project Architecture

This is my favorite topic, when I started to work on mobile stuff with Actionscript 3 I thought on how to have great performances but with a good architecture that allow me to maintain my application during own life.

So I investigated on how new mobile technologies work and I found that Nokia QT works on mobile with a MVVM architecture, usually instead of controllers you can use delegates but depends of the application.
Working with MVVM architecture and a good design pattern like observer you can solve any problem in a mobile project, performances are perfect and you can optimize your code in the best way you like.
There are other tests that I want to try, the first one will be using Signals instead of Observer, I’d like to know performances in a mobile project (stay tuned :P ).

Final Conclusion

The new Flex framework is an interesting step to the future, with this framework I’m sure you can create cool application in few days focusing on details and not on the application skeleton.

I suggest to take a look at Adobe TV, Adobe labs and Adobe Opensource to start work with Flex HERO!

UPDATE

take a look here to the Flex mobile performance

Working with Adobe AIR FileSystem API on iPad

Recently I made some test on iPad to test how to update contents of my mobile applications.
I tried some new AIR 2 API like open default program with PDF or XLS files but I get error #3000 (privileges error).
My idea is to create a routine where I’ll be able to update all contents on my application without passing trough Apple store.
So I tried with URLStream and AIR filesystem API, everything works well.
Code is so easy, take a look here:

//RETRIEVING IMAGE FROM ANY WEBSERVER
var urlS:URLStream = new URLStream();
urlS.addEventListener(Event.COMPLETE, downloadComplete);
urlS.addEventListener(ProgressEvent.PROGRESS, showPerc);
urlS.load(new URLRequest("http://192.168.1.9:8888/oliviaWilde.jpg"))

//DOWNLOADED IMAGE BYTEARRAY AND LOADING IN LOADER
function downloadComplete(e:Event):void {

  perc_txt.text = "";
  fileData = new ByteArray();
  urlS.readBytes(fileData,0,urlS.bytesAvailable);
  bytes = urlS.bytesAvailable;
  l.loadBytes(fileData);
  l.addEventListener(MouseEvent.CLICK, saveIt);

}
//SAVE IMAGE INTO APPLICATIONSTORAGEDIRECTORY
function saveIt(e:MouseEvent):void{

  f = File.applicationStorageDirectory.resolvePath("a.jpg");
  var fs:FileStream = new FileStream();
  fs.open(f, FileMode.WRITE)
  fs.writeBytes(fileData);
  fs.close();

}

//LOAD IMAGE FROM APPLICATIONSTORAGEDIRECTORY 
function loadLocalImg(e:MouseEvent):void{

  var finalBA:ByteArray = new ByteArray();
  var fs:FileStream = new FileStream();
  fs.open(f, FileMode.READ);
  fs.readBytes(finalBA, 0, bytes);
  fs.close();
  l.loadBytes(finalBA);

}

Using applicationStorageDirectory, you can save data into your application and retrieve it with AIR API.
In the video below, you can see a little demo where I load an image from a server, I save it, I unload click on the black right button and finally I load again but from ApplicationStorageDirectory, with the black left one, instead of loading from webserver.

mPresenter, flash platform presentation tool

mPresenter is a new tool that my company develop in last few months, finally is available to download.
Going in deep about this new solution, what is it mPresenter?

mPresenter is a cross-platform software composed by 2 different tools: a mobile manager and a desktop viewer.
It helps you during own presentation to your boss or clients, during a public talk or only when you want to show your holidays photos to your friends.
With mPresenter you can manage your presentation directly from your mobile device, you can draw or highlight on a slide, photo or flash file, change with next or previous content, receive comments that you add in content and so on.

You can download AIR version on mPresenter official website and Android controller directly on Android Marketplace.In next few days (I hope) you can find mPresenter mobile on Apple store too, so stay tuned for news about it!

Do you want watch mPresenter in action? Take a look at youtube video.

Do you want to have a free copy?! It’s easy, go to official website, add mPresenter banner to your blog or website and the first 10 people that add a comments to this post with a link at own website with mPresenter banner automatically win a free mPresenter copy!
Remember to leave in the comment your name, email and link to the site where I can find mPresenter banner.

Finally, if you are going to MAX in L.A. and you want to know more about mPresenter, you can find me there, so feel free to drop me a line to meet there.

I’m waiting for feedbacks and have fun guys with mPresenter!

Android development with Flash Platform

First of all I’d like to say thank you to JUG Padova that give me opportunity to talk about Flash Platform in own Java User Group.
Saturday morning I got a talk about Android development with Flash Platform in a school in Padova.
There were 40/50 people more or less, students, Flash Platform devs and Java devs, so I’m glad about the final result.

I talked about my experience on working with Flash Platform on Android, suggested some tips & tricks to improve own applications made with AIR or web site for Flash Player on Android and finally I reported latest news from Flash on the Beach general session.

Adobe has just released Adobe AIR for Android so from last weekend you can download it and start to develop your own Flash Platform contents for Android devices.

You can download my presentation slides with some samples directly here, for now slides are in Italian but if someone is interesting in an English translation feel free to add a comment here.

UPDATE
Here you can watch the seminar: http://www.archive.org/details/AndroidDevelopmentWithFlashPlatform

mPresenter: new tool for speakers

I become speaker 4/5 years ago, after 30/40 talks in Italy and around the globe and tons of lessons like instructor, after study how to prepare slides for presentations, after a couple of courses about public speaking and so on, finally this January I started to think about how can I help speakers during own presentation?

When I answered to this question I started to think about mPresenter.

mPresenter is composed by 2 different applications: a mobile application and a desktop one.
Obviously everything is build with Flash Platform: AIR 2, Flex 4 and AIR for Android.
The mobile one allow you to manage your presentation, pointing or drawing on slide, changing them.
Also, it allows you to read notes added in each slide during preso composition.

AIR application allows speakers to make own presentation: moving slides in right position, adding notes to a slides and zooming on it.
You can easily drag and drop images from your OS to mPresenter and create the perfect presentation.
We are working to add new features on this software but for now you can see a preview video on youtube.
I really love if you can give us your feedbacks and suggestions to improve this software and become a really useful utility for all speakers.
We believe in you!

Flash Platform on Android

Sorry if I don’t post anything until now but I study a lot during last months and finally I’ve time to write a new post about Flash Platform on Android.

I’m glad to talk about this argument because after Flash Lite experience I was not so excited to work with these technologies on mobile, but finally I can say that we can forget Flash Lite experience in this new way to think mobile.
First of all I’d like to share with you a thought about Adobe mobile direction.
Adobe is releasing 3 cool mobile technologies Flash, Flex and obviously AIR; the most interesting for me is Flex 4.1 (codename HERO) that allow to create contents for RIAs, Dekstop Apps, Mobile RIAs and Mobile Apps.
In fact with HERO, Adobe gives us opportunity to develop better and faster with the same framework! Yes, you read well, 1 framework for everything!
They add some cool components dedicated for mobile development like ActionBar or ViewNavigator. It’s really impressive!
If you have an Android FroYo device, try to download some .apk file made with Flex on Coenraets blog.

I think Adobe is going to the right direction and new technologies that will be released in next months give us a new opportunity to bring our contents and deliver them to mobile! So THANK YOU ADOBE!

After these considerations, I’d like to talk about few experiments that I tried during last weeks.
Flash Platform on Android works very well, cool performance and with a good coding you can create great stuff.
I’m working on a mobile library with some useful components like grid, list, image and so on; I think that work with Flash Platform on mobile is so easy if you have an idea on how to work for mobile.
Obviously, if you are a Flash developer you are not a Flash mobile developer automatically! But you can become a mobile developer in few easy steps:

1. Optimize your code: remember to remove all listeners, put variables to null, using object pooling instead of create and destroy variables, use design patterns and so on.
2. System.gc() finally works! On Flash Player 10.1 if you run this command it works very well and save lots of memory for your porjects!
3. Don’t insert tons of stuff on your screen: when you design UI of your application remember that you have a small screen so remember to work with 14px fonts (minimum size), big hit button area (50px minimum), optimized images, avoid vector strokes.
Remember also to test if an asset is better in pixels instead of vectors or viceversa, because sometimes trying on device is the best way to find an answer!
4. Test on device anytime you add a consistent feature.
Don’t test your application only when you finish it, but test anytime you add a new feature because what you see on your computer could not be the same on your Android device!

Those are only few suggestions to start to work with Flash Platform on Android; on Amazon I saw that many people will release some cool books about Flash Platform development on mobile device so please take a look!

Finally, I give you a couple of videos about a runtime image manipulation on Android with Convolution filter made in less then 50 lines of code and a new component that I develop for our library called Skeleton component that simulate navigation of iPad Wired app but made for Android with Flash Platform.
I’m finishing it but for now I’m glad for final result; it’s totally XML driven and you can add swf, videos or images, send data to swf files and so on.
A cool test that I made is to port it on an AIR app for desktop and without changing a line of code I have the same result!
So if you plan your development well you can have one core and different deploy, thank you again Adobe!
Now I want to try it on an Android tablet and then I’ll post some results about that.
For now I can say that Flash on Android will revolutionize Android mobile development experience and if Adobe goes in this direction I can say that they will revolutionize mobile developer life (not for all, isn’t it Steve?!).

Multitouch with Actionscript 3 and AIR 2.0

AIR 2.0 is out with a BETA version on labs since a couple of weeks ago more or less.
It introduces a lots of new features like UDP protocol, Socket server implementation, access to raw micrhophone data, multitouch and gesture support and so on.

When I see multitouch and gesture support I start to think how many devices are touchscreen based and they are growing a lots in those months, so I start to investigate about that features.
First of all I suggest to read a cool article on devnet made by Christian Cantrell, he goes in deep about this new features and give you a lots of information about Multitouch, TouchEvent and gestures.
It’s so interesting because you can see compatibility of that features with different OS also.

In this post, I’d like to share with you a little sample on how you can create an AIR 2.0 application with Flash Builder and test it with a macbook trackpad.
In fact, you can use macbook trackpad gesture because they are supported on AIR and it’s so interesting, for example, if you want to test an application for new Wacom Bamboo pen & touch and you haven’it.
Wacom Bamboo has a new AS3 SDK for Flex and Flash that allow you to work with multitouch and gesture too, it could be so interesting if you don’t have a multitouch for an expo and you want to buy a cheap solution to give a cool interaction for your possible new clients.
Bamboo has also the availability to create “minis” that are applications dedicated to Wacom Bamboo, but you can read more at Wacom developer website.

So, in this sample we load an external image and we use gesture to try our macbook trackpad:

package {


import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
import flash.events.TransformGestureEvent;
import flash.text.TextField;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;


public class MultiTouchSample {


Multitouch.inputMode = MultitouchInputMode.GESTURE;
private var sq:Sprite;


public function MultiTouchSample() {


sq = new Sprite()
addChild(sq);


this.addEventListener(TransformGestureEvent.GESTURE_ZOOM, scaleObj);
this.addEventListener(TransformGestureEvent.GESTURE_PAN, panObj);
this.addEventListener(TransformGestureEvent.GESTURE_ROTATE, rotObj);


var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, addImg);
l.load(new URLRequest("img/sample.jpg"));
}


private function addImg(e:Event):void{
sq.addChild(e.target.content);
sq.scaleY = sq.scaleX = .2;
}


private function rotObj(e:TransformGestureEvent):void{
sq.rotation += e.rotation;
}


private function panObj(e:TransformGestureEvent):void{
sq.x += e.offsetX * 2;
sq.y += e.offsetY * 2;
}


private function scaleObj(e:TransformGestureEvent):void{
sq.scaleX *= e.scaleX;
sq.scaleY *= e.scaleY;
}
}
}

You can see that is so simple work with gesture, a couple of suggestions before starting work with them:

  • remember to verify which gesture are supported on your system, more information you can read on devnet article about multitouch and gesture
  • TransformGestureEvent is event class dedicated to gesture
  • you can use TouchEvent also

Feel free to leave a comment and thank you to visit this blog.

Touch screen and cd-rom with Multidmedia Zinc

One recent project that I produce is a touch screen software, obviusly I made it with Zinc.

So I’d like to share my experience with my blog readers.

First of all, I must say that Zinc has a too bad documentation, a lots of examples don’t work and there are some big bugs.

ZINC and FTP CONNECTION
In my last project I add a routine to download new files from touch screens.
Zinc FTP API works only in Windows, but for this project, all touch screens had OS Win, so no problem.
In this case, I found 3 problems, first of all I can’t download all files togheter because Zinc had some issues to do this operation, so when I download a file, when onComplete event triggered I launch another one.
Probably Zinc didn’t copy all bytes from FTP server to client and it crashed.
So I put a setTimeOut function to call a new file after 1 second and it works!
Finally, using close method of FTP class, FTP session is still opened…so I delete FTP istance and it works! So crazy!

ZINC and Flex
Recently I produce 3 projects with Flex and Zinc…I found a lots of interesting issues.
When you work with Zinc in Flex, you must add SWC library to use Zinc API, so you bring it from 2 folders(one .swc in for Flash and one for Flex, but you could use both in Flex) and there is different way to implements same API with .swc for Flash or for Flex, so take a look of which .swc you could use to work.
Another problem that I found is when you create a transparent application and you have mx:TextInput, if you have focus in textinput component and you try to use keyboard arrows to move cursor, you’ll receive an unknown error!
In Multidmedia forum Peter suggests to me to use callLater function, but it doesn’t work.

So those are some problems that I would share with you, I hope that they are useful for everyone.