QML做渐变色文字动画

拥有回忆 提交于 2020-01-28 05:01:10
Item {
        id: container
        width:200
        height:200

        Rectangle {
             id: gradientRect;
             width:80
             height: 80
             gradient: Gradient {
                 GradientStop { position: 0; color: "red" }
                 GradientStop { position: 1; color: "steelblue" }
             }
             visible: false
             layer.enabled: true;
             layer.smooth: true
         }

        Text {
            id: text
            anchors.centerIn: parent
            color: "pink"
            text: "Hello world!"
            font.pixelSize: 32
            layer.samplerName: "maskSource"
            layer.enabled: true
                 layer.effect: ShaderEffect {
                     property var colorSource: gradientRect;
                     fragmentShader: "
                               uniform lowp sampler2D colorSource;
                               uniform lowp sampler2D maskSource;
                               uniform lowp float qt_Opacity;
                               varying highp vec2 qt_TexCoord0;
                               void main() {
                                   gl_FragColor =
                                       texture2D(colorSource, qt_TexCoord0)
                                       * texture2D(maskSource, qt_TexCoord0).a
                                       * qt_Opacity;
                               }
                           "
                 }



            SequentialAnimation on font.letterSpacing {
                loops: Animation.Infinite;
                NumberAnimation { from: 0; to: 50; easing.type: Easing.InQuad; duration: 3000 }
                ScriptAction {
                    script: {
                        container.y = (screen.height / 4) + (Math.random() * screen.height / 2)
                        container.x = (screen.width / 4) + (Math.random() * screen.width / 2)
                    }
                }
            }

            SequentialAnimation on opacity {
                loops: Animation.Infinite;
                NumberAnimation { from: 1; to: 0; duration: 2600 }
                PauseAnimation { duration: 400 }
            }
        }
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!