1

我尝试像这样在 Titanium 中创建一个 ImageView:

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

在 android 上,它按预期获得了它的大小,但在 IOS 上,它根本没有被缩放。有什么,我做错了吗?或者我应该通过手动创建ImageViews然后用它们来逐帧进行setInterval吗?

4

2 回答 2

2

这实际上不是一个一致的解决方案,它应该是一个评论,但由于我没有足够的代表,我必须把它写成答案。

对于初学者,我会尝试给它一个 top 和 left 属性。其次,这些图像是从远程 URL 检索到的吗?远程 URL 仅在 Android 中受支持。如果是这种情况,您可以按照您在问题中所说的那样做一个解决方法。

最后,'dp' 仅适用于 android,因此它在 iOS 中根本无法缩放,它只会删除 'dp' 并将数字用作“点”,在非视网膜屏幕上它将是相同的数字像素和在视网膜显示器上它将是双倍的。

于 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 回答