피카소의 애니메이션 로딩 이미지
이미지를 다운로드하는 동안 자리 표시자가 표시 할 드로어 블을 사용하여 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 메서드가 호출 될 때이를 숨기고 이미지를 표시 할 수 있습니다. 여기 에서 기본적인 구현을 볼 수 있습니다.
I found answer to this question!
See: https://github.com/square/picasso/issues/427#issuecomment-266276253
In addition to answer of @DBragion, try below.
Now we can fix height and width!
image_view.scaleType = ImageView.ScaleType.CENTER_INSIDE
picasso.load(your_path)
.fit()
.centerCrop()
.noFade()
.placeholder(R.drawable. progress_animation)
.into(image_view)
I think there are two key points.
use noFade()
set image_view's scaleType to "CENTER_INSIDE"
I made it working in following way:
Created a drawable (found somewhere on the Internet) and put it in the 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>
In my item for the GridView added ProgressBar element:
<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"/>
In Adapter added Target Object with following parameters, where poster and spinner are references to ImageView and ProgressBar:
// Target to show/hide ProgressBar on ImageView
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); } };
Results will be like that on loading - circle is rotating (sorry for this screenshot, but images are appearing too fast): ScreenShot
DBragion의 기술을 사용하려는 모든 사람 : 최신 버전의 Picasso가 있는지 확인하십시오. 그렇지 않으면 작동하지 않습니다. 버전 2.5.2를 사용할 때까지 내 것이 작동하지 않았습니다.
compile 'com.squareup.picasso:picasso:2.5.2'
이 링크 에서 Jake Wharton은 다음과 같이 말했습니다.
아니. 모든 이미지 디코딩에 Android BitmapFactory를 사용하며 애니메이션 GIF 지원이 없습니다 (슬프게도).
그럼 당신은 할 수 없습니다
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);
Picasso PlaceHolder를 사용하십시오.
Picasso.get()
.load(datas[position].artist?.image)
.placeholder(R.drawable.music_image)
.error(R.drawable.music_image)
.into(holder.cardViewImage)
참고 URL : https://stackoverflow.com/questions/24826459/animated-loading-image-in-picasso
'program story' 카테고리의 다른 글
JavaScript를 사용하여 브라우저 언어를 얻는 방법 (0) | 2020.08.14 |
---|---|
벡터 드로어 블에서 비트 맵 가져 오기 (0) | 2020.08.14 |
Linux에서 GDB를 시작하는 동안 명령 줄 인수를 어떻게 전달합니까? (0) | 2020.08.14 |
스위프트 : 가드 vs if let (0) | 2020.08.14 |
React Native에서 뷰의 배경색을 투명하게 설정하는 방법 (0) | 2020.08.14 |