2

だから私は 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 のイメージの上にグラデーションを配置するソリューションを実装するにはどうすればよいかということです。このように: ここに画像の説明を入力助けてくれてありがとう

4

0 に答える 0