我有一個帶有自定義邊框的圓形視圖,使用CircularImageView庫實現,並在RecyclerView
中膨脹。到目前爲止,我已經在其中放置了一個圖像,但現在我想用一個單色圓和一個文本替換它。以編程方式更改現有形狀中的純色
我創建了下面的形狀(shape_colored_circle.xml
):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:height="70dp"
android:width="70dp"/>
<solid
android:color="#00f"/>
</shape>
而且與CircularImageView
一起加入了一個TextView
FrameLayout
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<com.mikhaellopez.circularimageview.CircularImageView
android:id="@+id/card_thumbnail"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/icon"
app:civ_border="true"
app:civ_border_color="@color/border_color"
app:civ_border_width="2dp"
app:civ_shadow="true"
app:civ_shadow_color="@color/grey"
app:civ_shadow_radius="10"
android:contentDescription="@string/card_thumbnail"/>
<TextView
android:id="@+id/card_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/app_name"
android:textSize="18sp"
android:textStyle="bold"/>
</FrameLayout>
</LinearLayout>
我知道,佈局似乎有點奇怪(「爲什麼需要頂部LinearLayout
?」),但沒有它,該視圖根本不會出現在RecyclerView
中,而此佈局(取自圖書館的示例)滿足我們的需求。
在onBindViewHolder
我設定的形狀爲CircularImageView
資源:
holder.thumbnail.setImageDrawable(activity.getResources().getDrawable(R.drawable.shape_colored_circle));
最後,我看到了我的期待。問題是我的drawable預先設置了特定的顏色。因此,我試圖以編程方式創建一個形狀:
GradientDrawable gd = new GradientDrawable();
gd.setShape(GradientDrawable.RECTANGLE);
gd.setColor(colors[position]); //Getting the color from a predefined array of colors
holder.thumbnail.setImageDrawable(gd);
但是視圖只是變成了一個黑色的矩形。我試圖通過編程創建一個形狀的更多解決方案(所有這些都非常相似)都無濟於事 - 我要麼看到一個黑色矩形,要麼根本看不到任何東西。
我做錯了什麼?有沒有其他的方法來創建一個形狀,或者在運行時改變現有形狀的方法?或者,也許完全不同的方式來實現所需的行爲?
謝謝!
幾年前我碰到一個問題,當我嘗試以編程方式設置顏色時,我的drawable的背景變黑。也許有類似的問題? http://stackoverflow.com/questions/24581900/android-button-background-xml-sometimes-loses-alpha-when-setting-color-filter – 0x5453
@ 0x5453我添加了'gd.setAlpha()'。對於值255,它是一個黑色矩形,對於值0,它顯然是不可見的。你是否認爲你的解決方案與程序創建的drawable相關? –