0

白い背景を持つxmlで定義された描画可能な楕円があります。textViewこの円をgridAdapter 内のバックグラウンド リソースとして設定しています。

コードで描画可能な円の色を変更したいのですが、あまり運がありません。.setColor.setColorFilterおよび他のさまざまなハックを使用しましたが、どれも機能しませんでした。円は白textViewのように背景に読み込まれ、変化することはありません。

ここでは、drawable を読み込んでその色を変更し、それを背景リソースとして に追加しようとしていますtextView

            int color = Color.parseColor(locationModel.col_line_color); // Color of the line

            GradientDrawable bgcircle = (GradientDrawable) gridContext.getResources().getDrawable(R.drawable.circle);
            bgcircle.mutate();
//          bgcircle.setColor(color);

            bgcircle.setColorFilter(color, Mode.SRC_ATOP);

            viewHolder.textView.setText((locationModel.col_line).toString());
            viewHolder.textView.setBackgroundResource(R.drawable.circle);

描画可能な形状の XML:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">

   <solid 
       android:color="@android:color/white"/>

   <size 
       android:width="120dp"
       android:height="120dp"/>

</shape>

多くのチュートリアルで.mutate()は を実装する.setColorFilter()必要がありますが、あまり運がありませんでした。PorterDuff モードをいくつかの代替手段に変更しようとしましたが、円は引き続き白くレンダリングされます。

ヘルプ/ガイダンスをいただければ幸いです。

4

1 に答える 1

2

現在の xml ドローアブルを変更するのではなく、コードでドローアブルを作成します。グラデーションが必要ない場合は、 ShapeDrawableを使用することもできます。

ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
drawable.getPaint().setColor(newColor);
于 2013-04-15T04:30:29.103 に答える