Java 在imageview上添加低不透明度彩色覆盖

Java 在imageview上添加低不透明度彩色覆盖,java,android,imageview,overlay,porter-duff,Java,Android,Imageview,Overlay,Porter Duff,我的应用程序中有一个imageView,它显示一些背景图像,如下所示: <androidx.cardview.widget.CardView android:id="@+id/imagecard" android:layout_width="110dp" android:layout_height="188dp" android:layout_marginStart="8dp"

我的应用程序中有一个imageView,它显示一些背景图像,如下所示:

<androidx.cardview.widget.CardView
    android:id="@+id/imagecard"
    android:layout_width="110dp"
    android:layout_height="188dp"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    app:cardCornerRadius="10dp">

    <ImageView
        android:id="@+id/iv_BookCover"
        android:layout_width="110dp"
        android:layout_height="140dp"
        android:scaleType="fitXY" />

    <TextView
        android:id="@+id/tv_BookCover"
        android:layout_width="110dp"
        android:layout_height="140dp"
        android:fontFamily="@font/assistant_semibold"
        android:gravity="top|center"
        android:inputType="textMultiLine"
        android:paddingStart="4dp"
        android:paddingTop="20dp"
        android:paddingEnd="4dp"
        android:paddingBottom="20dp"
        android:scaleType="fitXY"
        android:textColor="@color/colorBlackText"
        android:textSize="18sp" />

</androidx.cardview.widget.CardView>

我想在它上面添加一些彩色覆盖层,如下图所示(蓝色覆盖层):

我使用的代码是:

Picasso.with( context ).load( R.drawable.ic_nocover ).resize( targetWidth, targetHeight ).into( iv, new Callback() {
    @Override
    public void onSuccess() {
        tv.setText( title );
        iv.setBackgroundResource( R.drawable.ic_nocover );
        iv.setColorFilter(getRandomMaterialColor( context, "500" ), PorterDuff.Mode.SRC_ATOP);
    }

    @Override
    public void onError() {
        tv.setText( title );
        iv.setBackgroundResource( R.drawable.ic_nocover );
        iv.setColorFilter(getRandomMaterialColor( context, "500" ), PorterDuff.Mode.SRC_ATOP);
    }
} );
其中
getRandomMaterialColor(context,“500”)
是我创建的一种选择随机颜色的方法

但是我得到的结果是没有任何覆盖的图像

有什么原因不起作用吗

我的XML如下所示:

<androidx.cardview.widget.CardView
    android:id="@+id/imagecard"
    android:layout_width="110dp"
    android:layout_height="188dp"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    app:cardCornerRadius="10dp">

    <ImageView
        android:id="@+id/iv_BookCover"
        android:layout_width="110dp"
        android:layout_height="140dp"
        android:scaleType="fitXY" />

    <TextView
        android:id="@+id/tv_BookCover"
        android:layout_width="110dp"
        android:layout_height="140dp"
        android:fontFamily="@font/assistant_semibold"
        android:gravity="top|center"
        android:inputType="textMultiLine"
        android:paddingStart="4dp"
        android:paddingTop="20dp"
        android:paddingEnd="4dp"
        android:paddingBottom="20dp"
        android:scaleType="fitXY"
        android:textColor="@color/colorBlackText"
        android:textSize="18sp" />

</androidx.cardview.widget.CardView>

我试图不在XML中做任何更改,而是以编程方式进行更改


谢谢

您的代码似乎没有问题。如果getRandomMaterialColor()返回一个有效的int值,包括有限的alpha通道(例如0x3F0000FF),则叠加效果应如预期的那样正确显示