У меня есть некоторый код QML, использующий инструментарий пользовательского интерфейса. Когда вы нажимаете на изображение, оно переключается между двумя разными логотипами. Я пытался заставить переход использовать анимацию, но он не работает; по истечении этого времени изображение резко меняется. Это не связано с задержкой в сети, поскольку вы получаете то же поведение, если вместо этого вы заменяете изображения локальными URL-адресами.
После поиска в Интернете я наткнулся на этот вопрос о SO , который предлагает использовать два разных элемента Image
и изменить непрозрачность, чтобы получить этот эффект. Это работает с обычными Image
s, но не изнутри UbuntuShape
из-за скругления углов и тому подобного. (Вы можете предложить мне переназначить свойство image
, но оно тоже не работает, что является этой ошибкой ).
Могу ли я сделать это в некотором приближении к этому упрощенному способу с UbuntuShape
? Если нет, как я могу добиться того же эффекта без изменения внешнего вида?
import QtQuick 2.0
import Ubuntu.Components 0.1
MainView {
width: units.gu(100)
height: units.gu(75)
Page {
title: "Erm"
UbuntuShape {
id: shape
anchors.fill: parent
anchors.margins: units.gu (10)
state: "ubuntu"
image : Image {
id : img
fillMode: Image.PreserveAspectCrop
}
MouseArea {
anchors.fill: parent
onClicked: {
if (shape.state == "ubuntu")
shape.state = "canonical"
else
shape.state = "ubuntu"
}
}
states: [
State {
name: "canonical"
PropertyChanges {
target: img
source: "http://design.ubuntu.com/wp-content/uploads/canonical-logo1.png"
}
},
State {
name: "ubuntu"
PropertyChanges {
target: img
source: "http://design.ubuntu.com/wp-content/uploads/ubuntu-logo14.png"
}
}
]
transitions: Transition {
PropertyAnimation {
target: shape
property: "opacity"
easing.type: Easing.InOutQuad
from: 0
to: 1
duration: 1000
}
}
}
}
}
edit : Обновлен используемый переход. Я знаю, что мое понимание переходов немного шатко, поэтому моей проблемой может быть просто какая-то ошибка здесь.
Редактировать 2 : Получил, чтобы фактически оживить, что является прогрессом. Это не правильно, хотя; изображение обновляется, и непрозрачность постепенно исчезает. Я хочу, чтобы он постепенно исчезал между изображениями. Я начинаю думать, что не хочу использовать состояния.
Я решил это достаточно хорошо для моих целей. Решением было использовать два UbuntuImage
с. Я превратил его в компонент многократного использования:
import QtQuick 2.0
import Ubuntu.Components 0.1
Item {
id: root
state: "ubuntu"
property alias source : img.source
property alias alt_source : img2.source
/* Signals to connect through. See onCompleted of mouseArea for an example */
signal clicked
function swapImage() {
state = state == "one" ? "two" : "one"
}
MouseArea {
id: mouseArea
anchors.fill: parent
Component.onCompleted: {
mouseArea.clicked.connect(root.clicked)
}
}
UbuntuShape {
id: shape
anchors.fill: parent
image: Image {
id: img
fillMode: Image.PreserveAspectCrop
}
}
UbuntuShape {
id: shape2
anchors.fill: shape
opacity: 0
image: Image {
id: img2
fillMode: Image.PreserveAspectCrop
}
}
states: [
State {
name: "one"
PropertyChanges {
target: shape2
opacity: 1
}
PropertyChanges {
target: shape
opacity: 0
}
},
State {
name: "two"
PropertyChanges {
target: shape
opacity: 1
}
PropertyChanges {
target: shape2
opacity: 0
}
}
]
transitions: Transition {
NumberAnimation {
properties: "opacity"
duration: 1000
easing.type: Easing.InOutQuad
}
}
}
Я поместил его в файл с именем UbuntuShape.qml
, а затем использовал его из другого файла, подобного этому
import QtQuick 2.0
import Ubuntu.Components 0.1
MainView {
width: units.gu(100)
height: units.gu(75)
Page {
title : "Erm"
UbuntuSwappableImage {
anchors.fill: parent
anchors.margins: units.gu(10)
source: "http://design.ubuntu.com/wp-content/uploads/ubuntu-logo14.png"
alt_source: "http://design.ubuntu.com/wp-content/uploads/canonical-logo1.png"
onClicked: swapImage()
}
}
}
Я думаю, он должен обеспечить больше хуков для звонящих, чтобы изменить вещи, но пока это хорошо для меня.