QML 实现图片帧渐隐渐显轮播

boyanx7个月前技术教程29

前言

所谓图片帧渐隐渐显轮播就是,一组图片列表,当前图片逐渐改变透明度隐藏,同时下一张图片逐渐改变透明度显示,依次循环,达到渐隐渐显的效果,该效果常用于图片展示,相比左右自动切换的轮播方式来说,这种方式在视觉效果上不会显得太突兀。当然,这里的图片还可以换成其他组件,比如一个复杂的页面。

正文

实现方式并不复杂,有一种最常规的方式就是自己去实现每张图片的动画效果,然后控制切换,这种方式比较麻烦一些。其实 QML 有自带的组件可以实现这种效果,那就是StackView,可以通过设置delegate来自定义切换的动画效果,另外,为了保证图片是轮询切换,需要用到定时器,来不断的向StackView中push图片,但是又不能让StackView中的数据越来越多,要不然会很消耗内存。所以这里根据调整 push 的参数来实现StackView中永远都只保持一张图片。

先来看看效果图:

直接上源码:

Window {
    visible: true
    width: 420
    height: 320
    property int flag: 1
    property var imgList: [img1,img2,img3]

    StackView{
        id:stack
        anchors.fill: parent
        initialItem: img1
        delegate: StackViewDelegate{
            function transitionFinished(properties)
            {
                properties.exitItem.opacity = 1
            }
            pushTransition: StackViewTransition {
                PropertyAnimation {
                    target: enterItem
                    property: "opacity"
                    from: 0
                    to: 1
                    duration: 1500
                }
                PropertyAnimation {
                    target: exitItem
                    property: "opacity"
                    from: 1
                    to: 0
                    duration: 500
                }
            }
        }
    }
    Image {
        id: img1
        source: "1.jpg"
        visible: false
    }
    Image {
        id: img2
        source: "2.jpg"
        visible: false
    }
    Image {
        id: img3
        source: "3.jpg"
        visible: false
    }

    Timer{
        interval: 2000
        repeat: true
        running: true
        onTriggered: {
            stack.push({item:imgList[flag%3],immediate:false,replace:true})
            flag++
        }
    }
}

这里设置图片隐藏的时间为500ms,图片显示的时间为1500ms,通过定时器来不断的向 StackView中 push 数据,注意这里的 push 参数

stack.push({item:imgList[flag%3],immediate:false,replace:true})

item 是通过数组方式不断改变对象

immediate 这个必须为 false,否则不会有动画过程

replace 设置为 true,就会将新的图片覆盖原有的图片,这样可以保证StackView 中数据不会一直增加。

【领QT开发教程学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

点击这里:Qt资料领取(视频教程+文档+代码+项目实战)

标签: 轮播图代码

相关文章

如何快速实现一个无缝轮播效果

需求简介轮播图是我们前端开发中的一个常见需求,在项目开发中,我们可以使用element、ant等UI库实现。某些场景,为了一个简单的功能安装一个库是没必要的,我们最好的选择就是手搓。我们来看一个需求上...

flutter软件开发笔记25-内置组件总结

以下是 Flutter 内置的核心 UI 组件分类及常用组件列表,方便你系统化学习和掌握:1. 基础组件组件名说明Text显示文本,支持样式、换行和富文本(TextSpan)Icon显示 Materi...

公众号小编新选择~SVG编辑器上线啦

欢迎来到svg编辑器新品发布会,我是本次大会的主持人三儿。(有没有一种打开苹果新品发布会推文的错觉 )首先要向大家隆重宣布,吊足大家胃口胖友们期待已久的svg编辑器正式上线啦!我们的svg编辑器有非常...

小程序开发日记三 (轮播图及数据绑定

两个内容。一个是小程序中使用轮播图。二是进行数据绑定。一、小程序轮播图 组件使用 小程序官方提供一个滑动视图容器—swiper组件。该组件可以帮助我们实现一个轮播图。所谓轮播图就是在页面中不断变换图...

如何用 DevEco Studio 的 ArkUI Inspector 轻松搞定鸿蒙应用 UI 布局

作为一名鸿蒙应用开发者,我最近遇到了一个让我头疼不已的 UI 问题——一个看似简单的页面布局,却在真机上出现了严重的错位问题。按钮重叠、文本溢出、图片显示不全……这些问题不仅影响了用户体验,还让我在调...

教你从头开始写课堂签到的微信小程序(二)实现签到及视频播放

一、签到子页面布局子页面主要是一个签到按钮,然后下方是签到记录列表。1、签到按钮布局代码:<button class='sign-button' bindtap='sig...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。