web-dev-qa-db-ja.com

AndroidカスタムシャドウカラーのCardView

CardViewの周りの影の色を変更することはできますか?主に、選択されたカードをマークするために使用されます点灯時

Lおよびpre-Lデバイスで有効である必要があります。

19
Davideas

CardViewシャドウカラーは、CardViewライブラリのリソースで定義されています。独自のプロジェクトでリソース値を再定義することでオーバーライドできますが、コードで動的に変更することはできません。

編集:リソース値のオーバーライドは、Lollipop以前のデバイスにのみ影響します。 Lollipop以降では、CardViewは常に色を変更できないネイティブシャドウの実装を使用します。

10
BladeCoder

Updatemy modification を確認してください。


回避策は次のとおりです。

コピー ソースコード of CardView。次に、独自のAndroid Library Moduleを作成し、サポートライブラリの代わりにこのモジュールを使用します。これらの後に、以下のようにCardViewのコードをコメントまたは削除します

static {
//        if (Build.VERSION.SDK_INT >= 21) {
//            IMPL = new CardViewApi21Impl();
//        } else
            if (Build.VERSION.SDK_INT >= 17) {
            IMPL = new CardViewApi17Impl();
        } else {
            IMPL = new CardViewBaseImpl();
        }
        IMPL.initStatic();
    }

つまり、apiが21以上の場合でも、compat-version CardViewApi17Implを使用します。その後、独自のcardview_shadow_start_colorcardview_shadow_end_colorを定義して、クラスRoundRectDrawableWithShadowのそれらをオーバーライドできます。さらに、それをよりカスタマイズ可能にすることができます。

希望は誰かを助けることができます。

2
Lym Zoy

私は小さなトリックを使用しました。 1つのCardViewは別のCardViewの後ろに配置されます。両方とも同じで、違いはcard_view:cardElevation="10dp"バックグラウンド1、およびcard_view:cardElevation="2dp"直面しているもの。標高の減算により、シャドウの長さが決まり、2番目のCardViewの色が最初のシャドウの色になります。

例:

<Android.support.v7.widget.CardView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/view_click_basement"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="2dp"
    card_view:cardCornerRadius="5dp"
    card_view:cardBackgroundColor="@color/colorNewGreen"
    card_view:cardElevation="10dp"
    card_view:cardUseCompatPadding="true">

    <Android.support.v7.widget.CardView
        Android:id="@+id/view_click"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="2dp"
        card_view:cardCornerRadius="5dp"
        card_view:cardElevation="2dp"
        card_view:cardUseCompatPadding="true">