Примерно так... Писал на скорую руку, но суть не в коде а в алгоритме.

Код AS3:
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.utils.setTimeout;
import flash.geom.Point;
import flash.events.MouseEvent;
public class Mains extends Sprite {
private var _viewer:Sprite = new Sprite();
private var _bitmapArray:Vector.<Bitmap> = new Vector.<Bitmap>;
private var _imageList:Array;
private var _imageOffset:uint = 0;
private var _offsetX:Number = 110;
private var _offsetY:Number = 110;
private var _showCount:uint = 3;
public function Mains() {
initface();
init();
}
private function initface():void {
var btnArr:Array = new Array('prev','next');
var btn:Sprite;
for each( var btn_name:String in btnArr ) {
btn = new Sprite();
btn.name = btn_name;
btn.buttonMode = true;
setGraf(btn);
btn.x = numChildren*(btn.width+10);
btn.addEventListener(MouseEvent.CLICK, mouseHandler);
addChild(btn);
}
}
private function setGraf(spr:Sprite):void {
spr.graphics.beginFill(0x333333);
spr.graphics.drawRect(0,0,20,20);
spr.graphics.endFill();
}
private function mouseHandler(e:MouseEvent):void {
var vecOff:Number = (e.target.name=='next') ? _showCount : -_showCount;
_imageOffset += vecOff;
if (_imageOffset<0) _imageOffset = 0;
if (_imageOffset>=_bitmapArray.length) _imageOffset=_bitmapArray.length-1;
showImage();
}
private function init():void {
_viewer.y = .5*stage.stageHeight;
addChild(_viewer);
_imageList = new Config().getImageList();
for each( var url:String in _imageList) new loadPictures(url, new Point(100,100) ).conteiner = _bitmapArray;
loadHandler();
}
private function loadHandler():void {
if (_imageList.length == _bitmapArray.length)
showImage();
else
setTimeout(loadHandler, 100 );
}
private function showImage():void {
while ( _viewer.numChildren ) _viewer.removeChildAt(0);
for ( var index:uint = _imageOffset; index < _imageOffset+_showCount; index ++ ) {
if ( index >= _bitmapArray.length ) break;
_bitmapArray[index].x = _viewer.numChildren*_offsetX;
_viewer.addChild(_bitmapArray[index]);
}
}
}
}
internal class Config {
public function Config() {}
public function getImageList():Array {
return new Array('http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
'http://cs9329.vk.me/u968029/l_f7ac0439.png',
'http://img.nnm.uz/images/06jfj.jpg',
'http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
'http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
'http://cs9329.vk.me/u968029/l_f7ac0439.png',
'http://img.nnm.uz/images/06jfj.jpg');
}
}
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.geom.Point;
internal class loadPictures extends Sprite {
public var bitmap:Bitmap;
public var conteiner:Vector.<Bitmap>;
private var _maxSize:Point;
public function loadPictures($url:String, maxSize:Point = null):void {
if (maxSize) _maxSize = maxSize;
bitmap = new Bitmap();
var req:URLRequest = new URLRequest($url);
var _picLoader:Loader = new Loader();
_picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loader2ByteArray);
_picLoader.load(req);
}
private function loader2ByteArray(evt:Event):void {
var lInfo:LoaderInfo = LoaderInfo(evt.target);
var ba:ByteArray = lInfo.bytes;
reloadByteArray(ba);
}
private function reloadByteArray(ba:ByteArray):void {
var reloader:Loader = new Loader();
reloader.loadBytes(ba);
reloader.contentLoaderInfo.addEventListener(Event.COMPLETE, reloaderComplete);
}
private function reloaderComplete(evt:Event):void {
var imageInfo:LoaderInfo = LoaderInfo(evt.target);
var bmd:BitmapData = new BitmapData(imageInfo.width,imageInfo.height);
bmd.draw(imageInfo.loader);
bitmap = new Bitmap(bmd);
bitmap.smoothing = true;
if (_maxSize) {
var k:Number = Math.min(_maxSize.x,_maxSize.y) / Math.max(bitmap.width,bitmap.height);
bitmap.width *= k;
bitmap.height *= k;
}
if (conteiner) conteiner.push(bitmap);
dispatchEvent(new Event(Event.COMPLETE));
}
}