まずは私の目標を説明しましょう。私はArcShape
のプロパティを変更するAnimation
を作成しようとしています。 ArcShape's
コンストラクタは、startAngle
とsweepAngle
の2つのフィールドをとります。 sweepAngle
をアニメーション化して、画面上に連続的に縮小して表示されるようにします。AndroidカスタムArcShapeのアニメーション
あなたはPacManを想像してこのアニメーションを描くことができます。彼の口が閉じられたと想像してください。このアニメーションは、PacManがなくなるまで彼の上顎をもっと開くようなものです。
今、私はこれを実装する際にいくつか問題があります。まず、ArcShape
が作成されたら、それを変更する組み込みの方法はありませんsweepAngle
。これは私の最初の質問に私をもたらします:ArcShape
をオーバーライドして、いくつかsetSweepAngle
メソッドを実装する方法はありますか?または、私はそれぞれsweepAngle
のためにnew ArcShape
を作成しなければなりませんか?
今度は第2号へ...第1号の解決策を見つけたとすれば、どうすればこのようにできますかAnimation
?私はあなたがDrawableのを拡張したほうが良いと各呼び出しの掃引角度を変更し、対応する弧を描くようにドロー()関数をオーバーライドするかもしれないと思う
public class OpenPacman extends Animation {
public OpenPacman(float startAngle, float sweepAngle) {
mStartAngle = startAngle;
mSweepAngle = sweepAngle;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
/* This represents the current sweepAngle */
float currAngle = mStartAngle + ((mSweepAngle - mStartAngle) * interpolatedTime);
//Now I need to update the ArcShape's sweepAngle to currAngle. But HOW?
}
}
"invalidate();"を追加する必要がありました。 applyTransformationメソッドに渡すと、ビューは新しい角度で再描画されます。 – marmor
指示に従っていますが、私のカスタムビューはUIに表示されません。完全なコードを投稿できますか? –
私は知っている、永遠に古い投稿....しかし、私はどのようにこれが円弧をアニメーション表示されません。現在の角度を更新するだけで、それを再描画できますが、アニメーション化されません。だから...どうしてこれを正確にアニメーション化しましたか? –