web-dev-qa-db-ja.com

ピカソを使用してレイアウトの背景を読み込む方法

Picassoを使用してプログラムでXMLレイアウトの背景を変更する方法の例を誰かに教えてもらえますか?私が見つけたすべての例は、ピカソを使用してImageViewを更新できますが、レイアウトの背景は更新できません。

ピカソを使用してURLからLinearLayout BackgroundResourceを設定できません

14

ピカソのターゲットを使用できます。

         Picasso.with(this).load("http://imageUrl").into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
               mYourLayout.setBackground(new BitmapDrawable(bitmap));
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        });

[〜#〜]更新[〜#〜]

コメントで@BladeCoderが言及したように、ピカソはターゲットオブジェクトへの弱い参照を保持しているため、ガベージコレクションされる可能性があります。

したがって、問題の1つについて Jake Whartonのコメント に従って、これは良い方法になると思います:

  CustomLayout mCustomLayout = (CustomLayout)findViewById(R.id.custom_layout)
  Picasso.with(this).load("http://imageUrl").into(mCustomLayout);

CustomLayout.Java:

public class CustomLayout extends LinearLayout implements Target {

    public CustomLayout(Context context) {
        super(context);
    }

    public CustomLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        setBackground(new BitmapDrawable(getResources(), bitmap));
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
        //Set your error drawable
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
        //Set your placeholder
    }
}
34
mmark

ImageViewを一時的なImageHolderとして使用しています。最初に、ピカソの画像をImageViewにロードし、getDrawableを使用してこのImageViewからレイアウト背景を設定します。

               ImageView img = new ImageView(this);
               Picasso.with(this)
              .load(imageUri)
              .fit()
              .centerCrop()
              .into(img, new Callback() {
                        @Override
                        public void onSuccess() {

                            myLayout.setBackgroundDrawable(img.getDrawable());
                        }

                        @Override
                        public void onError() {

                        }
                    });
6
Thiha

上記の解決策はどれも私にとってうまくいきませんでした。しかし、@ Thihaのソリューションが最も近いものでした。以下は私のために働きました:

final ImageView img = new ImageView(this);
    Picasso.with(img.getContext()).load(url).into(img, new com.squareup.picasso.Callback() {
        @Override
        public void onSuccess() {
            collapsingToolbarLayout.setBackgroundDrawable(img.getDrawable());
        }

        @Override
        public void onError() {
        }
    });
3
Arash Fotouhi

私の場合、イメージをイメージビューのサイズに合わせる必要があったので、バックグラウンドでイメージをロードする代わりに、このプロパティをイメージビューに追加して、通常どおりにイメージをロードしました。

Android:scaleType="fitXY"
0
henokg