Picasso (Android)로드 완료 이벤트를 수신하는 방법은 무엇입니까?


92

다음과 같은 빌더를 사용할 때 Picasso의 이벤트를 수신하는 방법이 있습니까?

Picasso.with(getContext()).load(url).into(imageView);

나는 전화를하기 위해 노력하고있어 requestLayout()invalidate()부모에 GridView제대로 크기를 조정할 수 있습니다 있도록하지만 난 리스너를 설정하거나 콜백하는 방법을 모르겠어요.

Picasso에 오류 이벤트보고가 있지만 성공 이벤트가 있습니까?

답변:


271

를 사용하여 CallbackonSuccess 및 onError 이벤트를 가져올 수 있습니다 . 다음과 같이 요청에 새 콜백을 추가하면됩니다.

Picasso.with(getContext())
    .load(url)
    .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {

                        }
                    });

그런 다음 onSuccess 콜백에서 변경 및 수정을 수행 할 수 있습니다.


1
onError () 실행시 오류 이미지를 표시하는 방법은 무엇입니까 ??
Jas

2
.error(R.drawable.error_placeholder_image)오류 이미지 설정에 사용
Raptor

onSuccess 내부에서 'this'컨텍스트에 어떻게 액세스 할 수 있습니까? 'this'컨텍스트에서 일부 변수를 업데이트해야하며 콜백 내에서 imageView에 액세스하려면 어떻게해야합니까? 들으
음파 발광

2
이 YourClassName.this.yourVariable @sonoluminescence 시도
소피 Hassaini

1
Kotlin에서는 어떤 모습일까요?
Dan2899

31

뷰에로드되기 전에 비트 맵에 액세스해야하는 경우 다음을 사용해보십시오.

private Target target = new Target() {
      @Override
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {       
      }
      @Override
      public void onBitmapFailed() {
      }
}

호출 방법에서 :

Picasso.with(this).load("url").into(target);

이상적으로는보기 또는보기 홀더 개체에서 직접 Target을 구현하는 것이 좋습니다.

도움이 되었기를 바랍니다


imgView는 어디에 있습니까?
Noor Hossain

@NoorHossain 비트 맵로드시 이미지 비트 맵 설정
famfamfam

6

@Jas 후속 질문에 MrEngineer13의 답변에 대한 의견으로 답변하면 (나는 어떤 답변에도 의견을 제시 할 충분한 평판이 없기 때문에) at 메서드 error()를 등록하기 전에 메서드 를 사용해야합니다. 예를 들면 다음과 같습니다.Callbackinto()

Picasso.with(getContext())
    .load(url)
    .error(R.drawable.error_placeholder_image)
    .into(imageView, new com.squareup.picasso.Callback() {
        @Override
        public void onSuccess() {
            //Success image already loaded into the view
        }

        @Override
        public void onError() {
            //Error placeholder image already loaded into the view, do further handling of this situation here
        }
    }
);

6

Square는 최근 Target 클래스를 업데이트했으며 이제 ( onPrepareLoadonBitmapFailed) 를 재정의 할 더 많은 메서드가 있습니다 .

Target target = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {

    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
};

그리고 여전히 다음을 사용해야합니다.

Picasso.with(context).load(url).into(target);

3
 private final Callback mImageCallback = new Callback() {
        @Override
        public void onSuccess() {
            startPostponedEnterTransition();
        }

        @Override
        public void onError() {
            startPostponedEnterTransition();
        }
    };

RequestCreator creator = Picasso.with(getActivity()).load(list.get(position).getId());
creator.into(imageView, mImageCallback);

0

이 시도

       Picasso.with(context)
            .load(services.get(position).getImageInactive())
            .into(holder.icon, new Callback() {
                @Override
                public void onSuccess() {
                    holder.imageLoad.setVisibility(View.GONE);
                }

                @Override
                public void onError() {
                    holder.icon.setImageResource(R.drawable.ic_error_image_load);
                }
            });

0

다른 답변에 대한 보완으로 원본 이미지보기를 사용할 위치를 모르는 경우, 예 ImageView myIV:

실물:

Picasso.with(activity).load(url).into(myIV);

새로운 (내부 onBitmapLoaded()new Target()) :

public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    myIV.setImageBitmap(bitmap);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.