2015-04-27 3 views
3

Я хотел бы сделать анимацию, когда мышь попадает на изображение, но НЕ, когда мышь покидает изображение.QML: анимация только при входе мыши в изображение

Item{ 
width: 800 
height:800 
Rectangle{ 
    id: blueRec 
    width: 100; height: 100; color: "blue" 
    MouseArea{ 
     anchors.fill: parent 
     onClicked: { 
      im1.visible = true 
      im1.source = "1.png" 
     } 
    } 
} 
Image { 
    id: im1 
    scale: im1MouseArea.containsMouse ? 0.8 : 1.0 
    Behavior on scale { 
     NumberAnimation{ 
      id: anim 
      from: 0.95 
      to: 1 
      duration: 400 
      easing.type: Easing.OutBounce 
     } 
    } 
    MouseArea{ 
     id: im1MouseArea 
     hoverEnabled: true 
     anchors.fill: parent 
    } 
} 

}

Код выше делает также анимацию, когда мышь покидает изображение.

Может кто-нибудь помочь?

+0

Не могли бы вы прояснить поведение, которое вы пытаетесь достичь? Это немного запутанно, потому что вы устанавливаете масштаб на 0,8 или 1,0, но тогда вы переопределяете эти значения в NumberAnimation. – MrEricSir

+0

Я хочу сделать некоторую отскок анимации изображения, когда мышь идет по изображению. Этот код делает это, но я не хочу эту анимацию отскока, когда мышь уходит из области изображения. И без линейной шкалы: im1MouseArea.containsMouse? 0.8: 1.0 анимации не будет. Независимо от того, какие цифры есть. Я могу использовать также масштаб: im1MouseArea.containsMouse? 1,0: 1,0. Результат тот же. Странно. –

ответ

2

Установка масштаба, а затем запуск анимации, изменяющей масштаб, кажется нечетным. Если бы я был вами, я бы разбил это на состояния и настроил анимацию на соответствующий переход.

Вот пример того, как это можно сделать:

Image { 
    id: im1 

    states: [ "mouseIn", "mouseOut" ] 
    state: "mouseOut" 

    transitions: [ 
     Transition { 
      from: "*" 
      to: "mouseIn" 
      NumberAnimation { 
       target: im1 
       properties: "scale" 
       from: 0.95 
       to: 1 
       duration: 400 
       easing.type: Easing.OutBounce 
      } 
     } 
    ] 

    MouseArea{ 
     id: im1MouseArea 
     hoverEnabled: true 
     anchors.fill: parent 

     onContainsMouseChanged: { 
      im1.state = containsMouse ? "mouseIn" : "mouseOut" 
     } 
    } 
} 
+1

Отлично. Спасибо. Я не могу выдвигать свою кандидатуру из-за низкой репутации, но, достигнув этого, я это сделаю. –

Смежные вопросы