2

所以我有一个带有网格布局管理器的回收站视图(最后的图片)。每个 Item 都有一个 ImageView,可以正常工作的代码如下:

Picasso.with(mContext).load(item1.gadget_image).into(vh1.imgView, new Callback() {
                @Override
                public void onError() {
                }

                @Override
                public void onSuccess() {
                    vh1.pgLoading.setVisibility(View.GONE);
                }

            });

其中 vh1 是包含小部件的 RecyclerView.Adapter 的视图持有者。但我需要 ImageView 上方的渐变(见下图)。该解决方案带有另一个 Image View,它具有作为 src 的可绘制对象,即 Gradient 。为了实现这一点,我必须将第二个 ImageView(渐变)的平移设置为比第一个 ImageView 多 1dp,以便在主图像上方具有渐变。这是代码:

<ImageView
        android:id="@+id/gradient"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/gradient"
        android:layout_alignTop="@+id/imgItem"
        android:layout_alignParentLeft="true"
        android:contentDescription="@string/app_name"
        android:layout_alignParentStart="true"
        android:translationZ="1dp" />

    <ImageView
        android:id="@+id/imgItem"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:contentDescription="@string/app_name"
        android:scaleType="centerCrop"/>

坡度 :

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

  <gradient
    android:angle="90"
    android:endColor="#15ffffff"
    android:startColor="#e1181818"
    android:centerColor="#4e232323" />

  <corners android:radius="0dp" />
</shape>

但此解决方案仅适用于 API >= Lollipop,对于 Lollipop 以下的 API 不起作用。所以我认为最好有一个 ImageView,Picasso 应该将图像作为背景加载到 ImageViewes 中,并将渐变作为 src。下面的代码:

Picasso.with(mContext).load(item.gadget_image).into(new Target() {

        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {

            vh.pgLoading.setVisibility(View.GONE);
            //setting background
            vh.imgView.setBackground(new BitmapDrawable(mContext.getResources(), bitmap));
        }

        @Override
        public void onBitmapFailed(Drawable drawable) {

        }

        @Override
        public void onPrepareLoad(Drawable drawable) {

        }

    });

在 XML 文件中:

<ImageView
        android:id="@+id/imgItem"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:contentDescription="@string/app_name"
        android:scaleType="centerCrop"
        android:src="@drawable/gradient"/>

在最后一个实现中,问题是加载图像太慢并且将图像与内容混淆。例如,如果有人点击第三个 ImageView 可能会显示来自第二个 Item 的内容。

我的问题是如何在不使用翻译的情况下实现一个解决方案,让所有 API 的图像都出现渐变。像这样: 在此处输入图像描述感谢您的帮助

4

0 回答 0