所以我有一个带网格布局管理器的循环器视图(最后的图像)。每个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,则可能会显示第二个项目中的内容。