如何实现使用QtQuick循环轮播图,并支持用户滑动切换
2016-08-30 14:03
429 查看
1 建立一个 QtQuick工程
2 在生成的main.qml中,改成如下的:
import QtQuick
2.6
3 然后添加上下面的:(Part3来源:Jason )
Flickable {
id: flickableForImage
z: 6
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.topMargin: 3
width: parent.width
height: (width / 375) * 135
contentWidth: width * 3
contentHeight: height
onMovementStarted: {
timerForImage.running = false;
animationForContenX.running = false;
}
onMovementEnded: {
timerForImage.running = true;
animationForContenX.duration = 500;
var a = Math.abs( contentX - 0 );
var b = Math.abs( contentX - width );
var c = Math.abs( contentX - (width * 2) );
var d = Math.min( a, b, c );
if ( a == d)
{
animationForContenX.to = 0;
animationForContenX.running = true;
}
else if( b == d )
{
animationForContenX.to = width;
animationForContenX.running = true;
}
else if (c == d )
{
animationForContenX.to = width * 2;
animationForContenX.running = true;
}
}
onWidthChanged: {
if ( animationForContenX.running )
{
return;
}
contentX = 0;
}
onHeightChanged: {
if ( animationForContenX.running )
{
return;
}
contentX = 0;
}
Timer {
id: timerForImage
interval: 6000
running: !pageForLogin.visible
repeat: true
onTriggered: {
animationForContenX.running = false;
animationForContenX.duration = 1000;
if ( flickableForImage.contentX <= 0 )
{
animationForContenX.to = width;
animationForContenX.running = true;
}
else if ( flickableForImage.contentX <= width )
{
animationForContenX.to = width * 2;
animationForContenX.running = true;
}
else
{
animationForContenX.to = 0;
animationForContenX.running = true;
}
}
}
NumberAnimation {
id: animationForContenX
target: flickableForImage
property: "contentX"
easing.type: Easing.OutCubic
}
Item {
width: parent.width
height: parent.height
Image {
width: parent.width / 3
height: parent.height
source: "qrc:/Mobile/Menu/TitleImage1.jpg"
}
Image {
x: (parent.width / 3) * 1
width: parent.width / 3
height: parent.height
source: "qrc:/Mobile/Menu/TitleImage2.jpg"
}
Image {
x: (parent.width / 3) * 2
width: parent.width / 3
height: parent.height
source: "qrc:/Mobile/Menu/TitleImage3.jpg"
}
}
RectangularGlow {
anchors.fill: parent
z: -1
width: parent.width
height: parent.height
glowRadius: 2
spread: 0.22
color: "#30000000"
}
}
}
4 QML类型说明-Flickable
ImportStatement: import QtQuick 2.2
Inherits: Item
InheritedBy: GridView and ListView.
2 在生成的main.qml中,改成如下的:
import QtQuick
2.6
import QtQuick.Window 2.2
import QtGraphicalEffects 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
//MainForm {
//anchors.fill: parent
//mouseArea.onClicked: {
// Qt.quit();
//}
//}
3 然后添加上下面的:(Part3来源:Jason )
Flickable {
id: flickableForImage
z: 6
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.topMargin: 3
width: parent.width
height: (width / 375) * 135
contentWidth: width * 3
contentHeight: height
onMovementStarted: {
timerForImage.running = false;
animationForContenX.running = false;
}
onMovementEnded: {
timerForImage.running = true;
animationForContenX.duration = 500;
var a = Math.abs( contentX - 0 );
var b = Math.abs( contentX - width );
var c = Math.abs( contentX - (width * 2) );
var d = Math.min( a, b, c );
if ( a == d)
{
animationForContenX.to = 0;
animationForContenX.running = true;
}
else if( b == d )
{
animationForContenX.to = width;
animationForContenX.running = true;
}
else if (c == d )
{
animationForContenX.to = width * 2;
animationForContenX.running = true;
}
}
onWidthChanged: {
if ( animationForContenX.running )
{
return;
}
contentX = 0;
}
onHeightChanged: {
if ( animationForContenX.running )
{
return;
}
contentX = 0;
}
Timer {
id: timerForImage
interval: 6000
running: !pageForLogin.visible
repeat: true
onTriggered: {
animationForContenX.running = false;
animationForContenX.duration = 1000;
if ( flickableForImage.contentX <= 0 )
{
animationForContenX.to = width;
animationForContenX.running = true;
}
else if ( flickableForImage.contentX <= width )
{
animationForContenX.to = width * 2;
animationForContenX.running = true;
}
else
{
animationForContenX.to = 0;
animationForContenX.running = true;
}
}
}
NumberAnimation {
id: animationForContenX
target: flickableForImage
property: "contentX"
easing.type: Easing.OutCubic
}
Item {
width: parent.width
height: parent.height
Image {
width: parent.width / 3
height: parent.height
source: "qrc:/Mobile/Menu/TitleImage1.jpg"
}
Image {
x: (parent.width / 3) * 1
width: parent.width / 3
height: parent.height
source: "qrc:/Mobile/Menu/TitleImage2.jpg"
}
Image {
x: (parent.width / 3) * 2
width: parent.width / 3
height: parent.height
source: "qrc:/Mobile/Menu/TitleImage3.jpg"
}
}
RectangularGlow {
anchors.fill: parent
z: -1
width: parent.width
height: parent.height
glowRadius: 2
spread: 0.22
color: "#30000000"
}
}
}
4 QML类型说明-Flickable
ImportStatement: import QtQuick 2.2
Inherits: Item
InheritedBy: GridView and ListView.
相关文章推荐
- [置顶] viewPager+photoView实现图片轮播和手势缩放功能 支持手势缩放的imageView 如何实现相册左右滑动和手势缩放 如何让图片自适应控件大小 photoView如何使用(上)
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- 使用ViewPager实现左右循环滑动及轮播效果
- 使用ViewFlipper实现图片自动切换,并支持手势滑动切换
- [置顶] 使用ViewFlow实现无限循环轮播图和滑动冲突解决
- Android 使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- js实现支持手机滑动切换的轮播图片效果实例
- Android使用ViewPager实现无限循环滑动及轮播(附源码)
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- js实现支持手机滑动切换的轮播图片效果实例
- Android 使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android使用ViewPager实现左右循环滑动及轮播效果