1

我需要一个由背景和移动拇指棒组成的水平控制器。它需要以下行为:

  1. 最初居中,拇指杆可以在背景范围内向左或向右拖动。
  2. 释放拖动时,拇指杆会重新居中。
  3. 如果触摸了背景的一部分,则拇指棒会跳到触摸位置。
  4. 如果触摸被释放,拇指棒会重新居中。
  5. 如果在触摸后进行拖动,则拇指杆将从触摸的位置拖动。

问题:

  1. 触摸时,拇指杆会根据需要跳到接触点。但是,如果在触摸之后立即进行拖动,则拇指摇杆会跳回到触摸之前的位置,然后再开始拖动。

  2. 如果将摇杆向右拖动并松开,它会根据需要立即跳回中心。如果它被拖到左边界,在它跳回中心之前会有一个延迟。

运行以下代码说明了控制器的工作和问题:

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"
        }
    }
   }
}
4

0 回答 0