【问题标题】:create image slider in titanium appcelerator在钛应用加速器中创建图像滑块
【发布时间】:2017-06-12 17:36:14
【问题描述】:

我需要创建一个像这样的图像滑块,其中特定图像中的图像需要更大并且在前景中,但我不知道该怎么做。我知道如何创建带有ScrollView 的滑块,但是如何创建将图像置于前面并增大图像的效果?

我正在 Appcelerator Titanium 中以经典模式开发应用程序。

编辑:

这就是我创建图像的方式:

for (var i = 0; i < 10; i++) {
        (function() {

            var viewImage = Ti.UI.createView({
                height : "70%",
                width : deviceWidth * 0.2857,
                zIndex : 0,
                isOpen : false,
                borderColor : "transparent",
                layout : "vertical"
            });

            scrollView.add(viewImage);
            require("resizeImage").resizeImage("/images/carro.jpeg", 0.35, 0.385, viewImage, deviceHeight, deviceWidth);

            if (i == 0) {
                viewImage.borderColor = "#0000aa";
                viewImage.zIndex = 100;
                scrollView.children[1].animate(a);
                scrollView.children[1].isOpen = true;
                lastPosition = 1;
            }
        })();
    }

我将第一张图片的 zIndex 设置为 100,将其他图片的 zIndex 设置为 0,但图片保留在右侧图片的后面。

【问题讨论】:

    标签: javascript image appcelerator appcelerator-titanium


    【解决方案1】:

    看看Ti.UI.Animation。有一些关于如何缩放图像的示例。有了它,您可以创建此效果。

     var matrix = Ti.UI.create2DMatrix()
     matrix = matrix.scale(2, 2);
     var a = Ti.UI.createAnimation({
        transform : matrix,
        duration : 2000,
     });
     img.animate(a);
    

    您可能需要不时更改zIndex

    完整示例:

    index.js

    var matrix = Ti.UI.create2DMatrix()
    matrix = matrix.scale(2, 2);
    var a = Ti.UI.createAnimation({
        transform: matrix,
        duration: 500,
    });
    
    function onClickBox(e) {
        $.box1.zIndex = 0;
        $.box2.zIndex = 0;
        $.box3.zIndex = 0;
        $.box4.zIndex = 0;
        $.box5.zIndex = 0;
    
        if (e.source != $.box1) $.box1.transform = Ti.UI.create2DMatrix().scale(1, 1);
        if (e.source != $.box2) $.box2.transform = Ti.UI.create2DMatrix().scale(1, 1);
        if (e.source != $.box3) $.box3.transform = Ti.UI.create2DMatrix().scale(1, 1);
        if (e.source != $.box4) $.box4.transform = Ti.UI.create2DMatrix().scale(1, 1);
        if (e.source != $.box5) $.box5.transform = Ti.UI.create2DMatrix().scale(1, 1);
    
        e.source.zIndex = 100;
        e.source.animate(a);
    }
    
    $.box1.addEventListener("click", onClickBox);
    $.box2.addEventListener("click", onClickBox);
    $.box3.addEventListener("click", onClickBox);
    $.box4.addEventListener("click", onClickBox);
    $.box5.addEventListener("click", onClickBox);
    
    $.index.open();
    

    index.xml

    <Alloy>
        <Window class="container">
            <ScrollView id="scroller">
                  <View id="box1" class="box"/>
                  <View id="box2" class="box"/>
                  <View id="box3" class="box"/>
                  <View id="box4" class="box"/>
                  <View id="box5" class="box"/>
            </ScrollView>
        </Window>
    </Alloy>
    

    index.tss

    ".container" : {
        backgroundColor: "white"
    }
    ".box" : {
        width: 100,
        height: 100,
        borderWidth: 4,
        borderColor: "#0f0",
        backgroundColor: "#000"
    }
    "#box1" : {
        left: 0
    }
    "#box2" : {
        left: 110
    }
    "#box3" : {
        left: 220
    }
    "#box4" : {
        left: 330
    }
    "#box5" : {
        left: 440
    }
    "#scroller" : {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0,
        scrollType: "horizontal"
    }
    

    【讨论】:

    • 我已经尝试过您的解决方案,但是在 android 上,当我为想要显示更大的图像定义 zIndex 时不起作用。乞丐图片右侧的图片始终位于另一张图片的前面。
    • 你必须设置 change all zIndex
    • 这就是我所做的。我将所有 zIndex 设置为 0,并且仅将我想要的图像设置为 10,但可能图像始终停留在他右侧的图像后面。
    • 添加了一个完整的效果示例。您可以将touchEnabled设置为false,一旦图像很大,这样更容易点击左/右视图。
    • 我已经测试了你的代码并且它可以工作,但是当我在经典版本中尝试它时它不起作用,我不知道为什么。我已经发布了我创建图像的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多