2012-09-08 13 views
11

मैं एक एनीमेशन रंगा जाना चाहते हैं जब एक तत्व दिखाई देने लगता हैQML एनिमेशन दिखाई संपत्ति में परिवर्तन

मैं इस

states: State 
{ 
    name: "iconOff" 
    when: iconOnSwitch.checked == false 
    PropertyChanges { target: selectIconRow; visible: false } 
} 

transitions: Transition 
{ 
    reversible: true 
    from: "" 
    to: "iconOff" 
    PropertyAnimation 
    { 
     properties: "x,y,visible" 
     easing.type: Easing.InOutQuad 
     from: selectIconRow 
     property: "visible" 
    } 
} 

लेकिन selectIconRow अभी भी करने की कोशिश की (, बिल्कुल नहीं पूरे सुचारू रूप से दिखाई देनी चाहिए है) तुरंत दिखाई देता है

मैं इस तरह की एनीमेशन का उपयोग कैसे कर सकता हूं?

उत्तर

14

क्योंकि यह बूलियन है, visible संपत्ति एनिमेटेड नहीं हो सकती है। शायद opacity चाल कर सकता है।

+10

अस्पष्टता के साथ देखभाल। अगर कुछ अस्पष्टता = 0.0 के साथ पूरी तरह से पारदर्शी है तो यह दृश्यमान = झूठी से अलग है। उदाहरण के लिए आपके दृश्यमान आइटम में एक नेस्टेड माउस एरिया अभी भी क्लिक करने योग्य नहीं है। –

+4

यह सच है। आम तौर पर दो दृष्टिकोण होते हैं। सरल मामलों के लिए 'दृश्यमान' को 'अस्पष्टता' = 0' से जोड़ा जा सकता है। अधिक जटिल परिदृश्यों में संक्रमण के साथ राज्य परिवर्तन जाने का रास्ता है। – sergk

8

यहाँ कैसे opacity साथ यह करने के लिए है:

Rectangle { 
    id: myRect 
    property bool stateVisible: true 
    ... 
    states: [ 
     State { when: stateVisible; 
      PropertyChanges { target: myRect; opacity: 1.0 } 
     }, 
     State { when: !stateVisible; 
      PropertyChanges { target: myRect; opacity: 0.0 } 
     } 
    ] 
    transitions: Transition { 
     NumberAnimation { property: "opacity"; duration: 500} 
    } 
} 

मन में वास्को रिनाल्डो की सलाह रखें।

+1

यह मेरे सिस्टम पर काफी काम नहीं करता है, मामूली सुधार के साथ मेरा जवाब देखें। वैसे भी इस स्निपेट के लिए धन्यवाद। –

2

मैं इसे काम करने के लिए थोड़ा Uga बुगा के जवाब को संशोधित करने के लिए किया था, यहाँ मैं क्या मिला है:

Rectangle { 
    id: myRect 
    property bool stateVisible: true 
      ... 
    states: [ 
     State { when: myRect.stateVisible; 
       PropertyChanges { target: myRect; opacity: 1.0 }}, 
     State { when: !myRect.stateVisible; 
       PropertyChanges { target: myRect; opacity: 0.0 }} 
    ] 
    transitions: [ Transition { NumberAnimation { property: "opacity"; duration: 500}} ] 
} 

कृपया ध्यान दें कि stateVisible आइटम आईडी के माध्यम से संदर्भित है, यह मेरी प्रणाली पर इसके बिना काम नहीं करता। शायद एपीआई में कुछ बदलाव ने इसका कारण बना दिया।

मैं भी transitions क्षेत्र में वर्ग कोष्ठक जोड़ा के रूप में एक सरणी वहाँ की आवश्यकता है

4
बस भविष्य में संदर्भ के

(हालांकि QML वाक्य रचना कोष्ठक के बिना वर्तनी की अनुमति देने के लिए लगता है), यहाँ मेरी समाधान जो वास्को की चेतावनी का भी ख्याल रखता है है। मूल रूप से मैं अस्पष्टता बदलने के बाद घटक की visible संपत्ति को एनिमेट कर रहा हूं। यह एक बूलियन पर एक NumberAnimation देखकर दर्द होता है, लेकिन यह काम कर रहा है:

states: [ 
    State{ 
     name: "Visible" 
     PropertyChanges{target: root; opacity: 1.0} 
     PropertyChanges{target: root; visible: true} 
    }, 
    State{ 
     name:"Invisible" 
     PropertyChanges{target: root; opacity: 0.0} 
     PropertyChanges{target: root; visible: false} 
    } 
] 

transitions: [ 
     Transition { 
      from: "Visible" 
      to: "Invisible" 

      SequentialAnimation{ 
       NumberAnimation { 
        target: root 
        property: "opacity" 
        duration: 500 
        easing.type: Easing.InOutQuad 
       } 
       NumberAnimation { 
        target: root 
        property: "visible" 
        duration: 0 
       } 
      } 
     }, 
     Transition { 
      from: "Invisible" 
      to: "Visible" 
      SequentialAnimation{ 
       NumberAnimation { 
        target: root 
        property: "visible" 
        duration: 0 
       } 
       NumberAnimation { 
        target: root 
        property: "opacity" 
        duration: 500 
        easing.type: Easing.InOutQuad 
       } 
      } 
     } 
    ] 

यह भी परिचय एक संक्रमण जब घटक गायब हो जाने है।

+0

यदि यह बहुत अधिक दर्द होता है तो आप इसके बजाय "PropertyAnimation" का उपयोग कर सकते हैं। – GrecKo

0
Item { 

scale: visible ? 1.0 : 0.1 
Behavior on scale { 
    NumberAnimation { duration: 500 ; easing.type: Easing.InOutBounce } 
    } 

} 

मेरे लिए चाल है।

+0

आइटम छुपाते समय यह एनिमेट नहीं होता है। – GrecKo

संबंधित मुद्दे