我需要一个由背景和移动拇指棒组成的水平控制器。它需要以下行为:
- 最初居中,拇指杆可以在背景范围内向左或向右拖动。
- 释放拖动时,拇指杆会重新居中。
- 如果触摸了背景的一部分,则拇指棒会跳到触摸位置。
- 如果触摸被释放,拇指棒会重新居中。
- 如果在触摸后进行拖动,则拇指杆将从触摸的位置拖动。
问题:
触摸时,拇指杆会根据需要跳到接触点。但是,如果在触摸之后立即进行拖动,则拇指摇杆会跳回到触摸之前的位置,然后再开始拖动。
如果将摇杆向右拖动并松开,它会根据需要立即跳回中心。如果它被拖到左边界,在它跳回中心之前会有一个延迟。
运行以下代码说明了控制器的工作和问题:
import QtQuick 2.0
Item {
id: horizontalController
width: 300
height: 100
Rectangle {
id: controllerBackground
width: (parent.width / 3) * 2
height: parent.height
anchors.centerIn: parent
color: "white"
}
Flickable
{
id: controllerFlick
width: parent.width / 3 * 2
height: parent.height
anchors.centerIn: parent
contentX: width / 4
contentWidth: bounds.width
contentHeight: bounds.height
boundsBehavior: Flickable.StopAtBounds
onMovementEnded: {
contentX = width / 4
}
MultiPointTouchArea{
id: controllerTouchArea
enabled: true
anchors.fill: bounds
touchPoints: TouchPoint {id: controllerTouchPoint }
onPressed: {
controllerFlick.contentX = Math.min(Math.max(controllerBackground.width - controllerTouchPoint.x,0),controllerBackground.width / 2)
}
onReleased: {
controllerFlick.contentX = controllerFlick.width / 4
}
}
Item{
id: bounds
width: controllerFlick.width * 1.5
height: controllerFlick.height
Rectangle {
id: image
width: parent.width / 3
height: parent.height
anchors.centerIn: parent
color: "red"
}
}
}
}