Lottie のアニメーションにカラーオーバーレイを追加するにはどうすればいいですか? 質問する

Lottie のアニメーションにカラーオーバーレイを追加するにはどうすればいいですか? 質問する

私は使用していますAndroid用ロッティアプリにアニメーションを追加します。このアプリでは、設定からプライマリ カラーとアクセント カラーを選択できます。透明な背景のアニメーションを使用しています。アニメーションを選択した色に合わせるには、アニメーションにカラー オーバーレイを追加したいと思います。この方法により、アニメーション ファイルを 1 つ用意しながら、プログラムで色を設定できます。

カラーオーバーレイを追加してアニメーションを操作する方法をご存知の方はいらっしゃいますか?

ベストアンサー1

カラー フィルターを適用するには、現時点では次の 3 つが必要です。

  1. KeyPath (編集したいコンテンツの名前)
  2. LottieProperty (編集したいプロパティの名前)
  3. LottieValueCallback (アニメーションの再レンダリングごとに呼び出されるコールバック)

レイヤー名は、アニメーションの JSON 内でタグ「nm」によって見つかります。

フルカラーオーバーレイを追加します。

LottieAnimationView animationView = findViewById(R.id.animation_view);
animationView.addValueCallback(
        new KeyPath("**"),
        LottieProperty.COLOR_FILTER,
        new SimpleLottieValueCallback<ColorFilter>() {
            @Override
            public ColorFilter getValue(LottieFrameInfo<ColorFilter> frameInfo) {
                return new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
            }
        }
);

単一レイヤーのカラーオーバーレイ(「チェックマーク」と呼ばれるレイヤー)を追加します。

LottieAnimationView animationView = findViewById(R.id.animation_view);
animationView.addValueCallback(
        new KeyPath("checkmark", "**"),
        LottieProperty.COLOR_FILTER,
        new SimpleLottieValueCallback<ColorFilter>() {
            @Override
            public ColorFilter getValue(LottieFrameInfo<ColorFilter> frameInfo) {
                return new PorterDuffColorFilter(Color.CYAN, PorterDuff.Mode.SRC_ATOP);
            }
        }
);

カラーオーバーレイを削除します。

LottieAnimationView animationView = findViewById(R.id.animation_view);
animationView.addValueCallback(new KeyPath("**"), LottieProperty.COLOR_FILTER,
        new SimpleLottieValueCallback<ColorFilter>() {
            @Override
            public ColorFilter getValue(LottieFrameInfo<ColorFilter> frameInfo) {
                return null;
            }
        }
);

詳細は以下をご覧ください公式文書

こちらもご覧くださいサンプルリポジトリ

コード スニペットの結果の図を以下に示します。

例

おすすめ記事