4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android 14からRippleEffectの色計算方法が変わる?

Last updated at Posted at 2023-06-01

Android 14 Beta4にて、この挙動は修正されました。仕様変更ではなくバグだったようです

一時期こういう動作があったという記録として記事は残しておきます


Android 14 Beta2を触っているとRippleEffectがかなり薄く表示されているなという印象を受けます。
バグかな?と思っていましたが、挙動を調べると、むしろ指定通りに動作するように修正されたのでは?というのが私の印象です。

※このネタはBeta版の動作からの推測でしかないのでご注意を

selectableItemBackgroundの定義

はじめは?attr/selectableItemBackgroundの定義が変わったのかな?とも思いましたが、調べて見ると
Theme.Material3.DayNight.NoActionBarの場合、res/drawable/item_background_material.xmlを参照していて、特に定義に違いはなさそうです。

RippleDrawableの色の扱い

次に以下のようなRippleDrawableを定義して、@color/rippleを変化させてどう表示されるか確認してみます。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/ripple">
    <item android:id="@android:id/mask" android:drawable="@android:color/white"/>
</ripple>

#C0000000の場合

Android 14 Beta2.1 Android 13

14と13で違いはなく、指定の色より薄く表示されるのがRippleEffectの色ですね。

#80000000の場合

Android 14 Beta2.1 Android 13

これも14と13で違いはなさそうです。

#40000000の場合

Android 14 Beta2.1 Android 13

ここで違いが出てきましたね。14の方が薄いですが、どちらかというと13の方が濃いというか、#80000000の場合と同じ色になっているようです。

#20000000の場合

Lightテーマの?attr/selectableItemBackgroundは#1F000000 になっているみたいなので一番近い色ですね

Android 14 Beta2.1 Android 13

明確に違いがあります。やはりAndroid 13 は#80000000の場合と同じ色になっているようです。#20000000より明らかに濃い色がでていますね。Android 14は順当に指定した色を、さらに薄くした色になっています。

Alphaを制限している処理

さらにRippleDrawableのソースコードを調べると以下のように、アルファが128以下なら128にするという処理が入っていますね。この処理が Android 14で変更されたのではないかというのが推測です。

    private int clampAlpha(@ColorInt int color) {
        if (Color.alpha(color) < 128) {
            return  (color & 0x00FFFFFF) | 0x80000000;
        }
        return color;
    }

まとめ

以上より、Android 14が薄いというより、Android 13まではRippleの色が一定以上薄くならないようになっていたのが、指定通りに計算されるようになった結果、と言えそうな変化ですね。

今までRippleを薄くできなかったのが、ちゃんと指定に比例して薄くできるように修正された。今まで通りの色で出したければアルファを0x80指定に変更する必要がある(対応の方法はある)

まだBeta2.1ですので、最終的に以前と同様の動作に戻るのか、これが最終的な動作になるのかは不明ですが、もしこれが意図した変化だとしたら、RippleEffectの色指定を全面的に見直す必要がありそうですね。
その場合、selectableItemBackgroundの定義が変わるのかどうかも気になります。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?