その場しのぎのマスクを作成する方法として、QML で PieSeries を使用しています。円形のアニメーション GIF があり、その上に PieSeries を追加しました。PieSeries には 3 つの PieSlices があります。そのうちの 2 つは「黒」であり、基本的に gif の対応する部分をブロックしています。残りの PieSlice は透明です。これで問題なく動作しますが、2 つの黒い PieSlices にグラデーションを付けて、エッジがあまり目立たないようにしたいと思います (グラデーションの透明度)。
ここで説明されているように、OpacityMask で LinearGradient を使用してみましたが、PieSlice で使用しても効果はありませんでした。
任意の提案をいただければ幸いです:)
これが私のコードです:
import QtQuick 2.0
import QtCharts 2.2
import QtGraphicalEffects 1.0
Item {
anchors.fill: parent //Fill the gif area
ChartView {
id: chart
anchors.centerIn: parent
height: parent.height+200
width: parent.width
legend.visible: false
antialiasing: false
backgroundColor: "transparent"
PieSeries {
id: pieOuter
size: 1.5
holeSize: 0.2
PieSlice { id: black1; value: 1; color: "black"; borderColor: "transparent" }
PieSlice { id: valSlice; value: d.val; color: "transparent"; borderColor: "transparent" }
PieSlice { id: black2; value: 1 - d.val; color: "black"; borderColor: "transparent" }
}
}
OpacityMask{
source: mask
maskSource: black1
}
LinearGradient {
id: mask
anchors.fill: black1
gradient: Gradient {
GradientStop { position: 0.2; color: "transparent"}
GradientStop { position: 0.5; color: "white" }
}
}
}
注: ここで d.val は 0 から 1 の間の値を保持します
私が達成しようとしていることを視覚化するのに役立ついくつかの画像を編集 します:私が始めているGIF(ソース- 元のファイルが大きすぎて添付できませんでした):
これは、現在どのようにアニメーション化されているかです:
これは私が実際にどのように見せたいかです (ここでは d.val に描かれています):