だから私は Grid Layout Manager (Image at the End) を備えた Recycler View を持っています。各アイテムには 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 の上にグラデーションが必要でした (下の画像を参照)。ソリューションには、 Gradient であるドローアブルを src として持つ別の Image View が付属していました。これを実装するには、2 番目の ImageView (グラデーション) の変換を最初の ImageView よりも 1 dp 大きく設定して、メイン イメージの上にグラデーションを配置する必要がありました。これはコードです:
<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 を 1 つ持つ方がよいと考え、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"/>
最後の実装の問題は、画像の読み込みが遅すぎて、画像とコンテンツを混同することです。たとえば、誰かが 3 番目の ImageView をクリックすると、2 番目のアイテムのコンテンツが表示される場合があります。
私の質問は、翻訳を使用せずに、すべての API のイメージの上にグラデーションを配置するソリューションを実装するにはどうすればよいかということです。このように: 助けてくれてありがとう