Разместить изображение на экране Android - PullRequest
0 голосов
/ 22 января 2012

Невозможно правильно выполнить простейшую задачу - разместить изображение на экране.Картинки загружаются из галереи, это показы, но попробовав много способов понять, что есть какие-то странности.Я использую Flex ViewNavigatorApplication без ActionBar и полного экрана.Альбомная ориентация экрана.Лучший вариант для размещения максимального размера изображения.Все изображения имеют размер, равный пропорциям 3264 х 2448.

Сделайте это:

protected var roll:CameraRoll;
protected var loader:Loader;

if(CameraRoll.supportsBrowseForImage && !roll)
{
roll = new CameraRoll();
roll.addEventListener(MediaEvent.SELECT, onSelect);
}

if(roll){
roll.browseForImage();
}

protected function onSelect(e:MediaEvent) : void
{
var data:MediaPromise = e.data;
var promise:MediaPromise = e.data as MediaPromise;
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR, onError);
loader.loadFilePromise(promise);
}
}
private function onImageLoaded(event:Event):void {

var bitmap:Bitmap = Bitmap(event.currentTarget.content);
var ratio:Number = bitmap.width / bitmap.height
trace (bitmap.width + '/' + bitmap.height + ' ratio: ' + ratio);//3264/2448 ratio: 1.3333333333333333
bitmap.width = Capabilities.screenResolutionY;
trace ('screenResolutionX: ' + Capabilities.screenResolutionY);//screenResolutionX: 800
bitmap.height = bitmap.width / ratio;
trace (bitmap.width + '/' + bitmap.height + ' ratio: ' + bitmap.width / bitmap.height);//799.9000000000001/599.95 ratio: 1.3332777731477623
spr.addChild(bitmap); //container
trace (spr.width + '/' + spr.height);//0/0
trace (this.width + '/' + this.height);//533/320 - here is the first - why these data?
trace (stage.width + '/' + stage.height);//1202.8500000000001/918.6500000000001 - 
//here is the second - why these data? 
//On the real phone in debug mode i see that image have about this dimensions, but trace above we see that the dimensions of 800 by 600.
trace (stage.stageWidth + '/' + stage.stageHeight);//800/480 - all OK
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onImageLoaded);
loader.contentLoaderInfo.removeEventListener(ErrorEvent.ERROR, onError);
}

На вопросы в комментариях следы.Я не понимаю, почему это происходит.

1 Ответ

1 голос
/ 23 января 2012

Поскольку вы используете Flex, пытались ли вы использовать компонент Spark Image вместо чистого ActionScript? Он имеет встроенное масштабирование со свойствами scaleMode и fillMode. Вы можете попробовать что-то вроде этого, как только ваше изображение загрузится:

private function onImageLoaded(event:Event):void {

    var bitmap:Bitmap = Bitmap(event.currentTarget.content);
    imageComponent.source = bitmap;
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onImageLoaded);
    loader.contentLoaderInfo.removeEventListener(ErrorEvent.ERROR, onError);
}

<s:Image 
    id="imageComponent"
    fillMode="scale" 
    scaleMode="stretch" 
/>
...