毕加索作为背景图像

时间:2015-08-10 13:28:42

标签: android picasso android-recyclerview gridlayoutmanager

所以我有一个带网格布局管理器的循环器视图(最后的图像)。每个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上方需要一个渐变(见下图)。该解决方案带有另一个图像视图,其中src是一个可绘制的渐变色。为了实现这一点,我必须将第二个ImageView(渐变)的转换设置为比第一个ImageView多1dp,以便在主Image上方具有渐变。这是代码:

<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&gt; = 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,则可能会显示第二个项目中的内容。

我的问题是如何在不使用转换的情况下实现一个解决方案,使Gradient高于所有API的图像。像这样 : enter image description here感谢您的帮助

0 个答案:

没有答案