1

私は次のようにTitaniumでImageViewを作成しようとしています:

var animationView = Titanium.UI.createImageView
(
    {
        images:animationImages,
        duration:50,
        repeatCount:0,
        width: '90dp',
        height: '270dp'
    }
);

androidでは期待どおりのサイズになりますが、IOSでは単純にスケーリングされません。何かありますか、私は間違っていますか?または、ImageViewを手動で作成し、で変更して、フレームごとに実行する必要がありsetIntervalますか?

4

2 に答える 2

2

これは実際には一貫した解決策ではないので、コメントにする必要がありますが、十分な担当者がいないため、回答として作成する必要があります。

手始めに、私はそれに上と左のプロパティを与えようとします。次に、これらの画像はリモートURLから取得されますか?リモートURLはAndroidでのみサポートされています。その場合は、質問で述べたように回避策を実行できます。

最後に、「dp」はAndroidでのみ機能するため、iOSではまったくスケーリングされません。「dp」を消去して数値を「ポイント」として使用します。Retina以外の画面では同じ数値になります。ピクセルの数と網膜ディスプレイでは、それはダブルになります。

于 2013-02-08T20:00:00.483 に答える
1

私はついに、次のような独自のアニメーションクラスを作成することにしました。

function Animation(data)
{
    var width = data.hasOwnProperty("width") ? data.width : Ti.UI.SIZE;
    var height = data.hasOwnProperty("height") ? data.height: Ti.UI.SIZE;
    var duration = data.hasOwnProperty("duration") ? data.duration : 50;
    var imageFiles = data.hasOwnProperty("images") ? data.images : [];

    var images = [];

    var container = Ti.UI.createView
    (
        {
            width:width,
            height: height
        }
    );

    for(var i=0; i<imageFiles.length; i++)
    {
        var image = Ti.UI.createImageView
        (
            {
                image:imageFiles[i],
                width:width,
                height:height
            }
        );

        if(i!=0)
            image.setVisible(false);

        container.add(image);
        images.push(image);
    }

    container.activeImage = 0;
    container.intervalId = null;

    container.setActiveImage = function(index)
    {
        if(container.intervalId == null)
            container.activeImage = index;
    }

    container.start = function()
    {
        var callback = function()
        {
            for(var i=0; i<images.length; i++)
            {
                if(i == container.activeImage)
                    images[i].setVisible(true);
                else
                    images[i].setVisible(false);
            }

            container.activeImage = (container.activeImage + 1) % images.length;
        }

        container.intervalId = setInterval ( callback, duration );
    }

    container.stop = function()
    {
        clearInterval(container.intervalId);
        container.intervalId = null;
    }

    return container;
}

module.exports = Animation;

そして、あなたはそれをこのように使うことができます:

var Animation = require('...path to your animation file');
var myAnimation = new Animation
(
    {
        width:'100dp',
        height:'100dp',
        duration:50, //duration while one frame is showing
        images:['one.png', 'two.png'...], //full paths
    }
);

//start:
myAnimation.start();

//stop
myAnimation.stop();
于 2013-02-18T18:20:09.347 に答える