이미지를 다운로드하는 동안 자리 표시자가 표시 할 드로어 블을 사용하여 Picasso에서 이미지를로드하는 다음 코드가 있습니다. 내가 원하는 것은 대부분의 전문 앱에서 볼 수있는 것처럼 이미지가로드되는 동안 주위를 돌아 다니는 애니메이션 회전 진행률 표시 줄 스타일 스피너입니다. Picasso는 이것을 지원하지 않고 정적 이미지 드로어 블 만 지원합니다. Picasso와 함께 작동하도록하는 방법이 있습니까? 아니면 다른 작업을해야합니까?
Picasso.with(context).load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.image_download_error)
.into(view);
답변
Picasso 자리 표시자를 사용하여 로딩 진행 애니메이션 이미지를 얻는 방법 :
애니메이션 회전 xml 개체를 사용하여 쉽게 해결했습니다.
단계 :
progress_image.png
/res/drawable/progress_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="center">
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/progress_image"
android:pivotX="50%"
android:pivotY="50%" />
</item>
</layer-list>
피카소 로딩 :
Picasso.with( context )
.load( your_path )
.error( R.drawable.ic_error )
.placeholder( R.drawable.progress_animation )
.into( image_view );
답변
이미지 다운로드가 매우 간단 할 때까지 진행 대화 상자를 구현했습니다. 상대 레이아웃에서 ImageView를 가져와 동일한 이미지보기에 진행 로더를 배치합니다. 아래 코드를 적용하고 진행률 대화 상자 표시 만 처리합니다.
holder.loader.setVisibility(View.VISIBLE);
holder.imageView.setVisibility(View.VISIBLE);
final ProgressBar progressView = holder.loader;
Picasso.with(context)
.load(image_url)
.transform(new RoundedTransformation(15, 0))
.fit()
.into(holder.imageView, new Callback() {
@Override
public void onSuccess() {
progressView.setVisibility(View.GONE);
}
@Override
public void onError() {
// TODO Auto-generated method stub
}
});
}
즐겨. 🙂
답변
안타깝게도 Picasso는 애니메이션 자리 표시자를 지원하지 않습니다.
이 문제를 해결할 수있는 한 가지 방법은 애니메이션 드로어 블이 아래에있는 FrameLayout에 ImageView를 배치하는 것입니다. 이렇게하면 Picasso가 이미지를로드 할 때 애니메이션 된 자리 표시 자 위에로드되어 사용자에게 의도 한 효과를 제공합니다.
또는 이미지를 Target에 로드 할 수 있습니다. 그러면 기본적으로 진행률 표시 줄이 표시되고 onBitmapLoaded 메서드가 호출되면이를 숨기고 이미지를 표시 할 수 있습니다. 여기 에서 기본적인 구현을 볼 수 있습니다.
답변
DBragion의 대답에 아래와 같이 모양 속성을 추가하면 매력처럼 작동합니다. 즐거운 코딩입니다.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="rectangle">
<size
android:width="200dp"
android:height="200dp"/>
<solid
android:color="#00FFFFFF"/>
</shape>
</item>
<item android:gravity="center">
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner"
android:pivotX="50%"
android:pivotY="50%" />
</item>
</layer-list>
Glide도 사용할 수 있습니다.
Glide.with(activity).load(url)
.apply(RequestOptions.centerInsideTransform())
.placeholder(R.drawable.progress_animation)
.into(imageview);
답변
이 질문에 대한 답을 찾았습니다!
참조 : https://github.com/square/picasso/issues/427#issuecomment-266276253
@DBragion의 답변 외에도 아래를 시도하십시오.
이제 높이와 너비를 고정 할 수 있습니다!
image_view.scaleType = ImageView.ScaleType.CENTER_INSIDE
picasso.load(your_path)
.fit()
.centerCrop()
.noFade()
.placeholder(R.drawable. progress_animation)
.into(image_view)
두 가지 핵심 포인트가 있다고 생각합니다.
-
noFade () 사용
-
image_view의 scaleType을 “CENTER_INSIDE”로 설정합니다.
답변
다음과 같은 방식으로 작동했습니다.
-
드로어 블 (인터넷 어딘가에 있음)을 만들고 res / drawable에 넣습니다.
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="90" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360"> <shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="7.0"> <gradient android:angle="0" android:centerColor="#007DD6" android:endColor="#007DD6" android:startColor="#007DD6" android:type="sweep" android:useLevel="false" /> </shape>
-
GridView에 대한 내 항목에서 ProgressBar 요소를 추가했습니다.
<ProgressBar android:id="@+id/movie_item_spinner" android:layout_width="@dimen/poster_width" android:layout_height="@dimen/poster_height" android:progressDrawable="@drawable/circular_progress_bar"/>
-
Adapter에서 다음 매개 변수와 함께 Target Object를 추가했습니다. 여기서 poster 및 spinner는 ImageView 및 ProgressBar에 대한 참조입니다.
// ImageView에서 ProgressBar 표시 / 숨기기 대상
final Target target = new Target() { @Override public void onPrepareLoad(Drawable drawable) { poster.setBackgroundResource(R.color.white); spinner.setVisibility(View.VISIBLE); } @Override public void onBitmapLoaded(Bitmap photo, Picasso.LoadedFrom from) { poster.setBackgroundDrawable(new BitmapDrawable(photo)); spinner.setVisibility(View.GONE); } @Override public void onBitmapFailed(Drawable drawable) { poster.setBackgroundResource(R.color.white); } };
-
로드시 결과는 다음과 같습니다. 원이 회전합니다 (이 스크린 샷에 대해 죄송하지만 이미지가 너무 빠르게 나타남).
ScreenShot
답변
DBragion의 기술을 사용하려는 사람 : 최신 버전의 Picasso가 있는지 확인하십시오. 그렇지 않으면 작동하지 않습니다. 버전 2.5.2를 사용할 때까지 내 것이 작동하지 않았습니다.
compile 'com.squareup.picasso:picasso:2.5.2'