Android Glide 이미지 로드(수신, 애니메이션 로드)
15553 단어 그림 로드
Glide.with(context)
.load(url)
.into(view);
with에 context,activity,fragment를 넣을 수 있습니다.;activity,fragment를 틀 때glide는 생명주기에 따라 그림을 불러옵니다.액티비티 사용을 추천합니다.
2. 불러오는 것과 불러오는 데 실패한 그림을 설정합니다
Glide.with(context)
.load(url)
.placeholder(R.drawable.loading) // , gif
.error(R.drawable.failed) //
.into(view);
3. 그림을 불러오는 효과에 담기
.crossFade()
4. 애니메이션을 animate()로 사용자화
에셋의 애니메이션에서 다음을 수행합니다.
코드로 돌아가면 첫 번째 옵션은 안드로이드 자원 id, 즉 애니메이션 자원을 전달하는 것입니다.간단한 예는 모든 안드로이드 시스템이 제공하는 슬라이드-in-left 애니메이션,android입니다.R.anim.slide_in_left .다음 코드는 이 애니메이션에 대한 XML 설명입니다.
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
set>
물론 XML 애니메이션을 만들 수 있습니다.예를 들어 작은 축소 애니메이션은 그림이 처음에는 작았는데 점차 원래 사이즈로 커진다.
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
android:duration="@android:integer/config_longAnimTime"
android:fromXScale="0.1"
android:fromYScale="0.1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1"
android:toYScale="1"/>
set>
두 애니메이션 모두 Glide 작성자에 사용할 수 있습니다.
Glide
.with( context )
.load( eatFoodyImages[0] )
.animate( android.R.anim.slide_in_left ) // or R.anim.zoom_in
.into( imageView1 );
그림이 네트워크에서 불러오고 준비되면 왼쪽으로 미끄러져 들어갑니다.
사용자 정의 클래스를 통한 애니메이션
이것은 아주 간단합니다. void animate (View view) 방법만 실행하면 됩니다.이 보기 대상은 전체 target 보기입니다.만약 그것이 사용자 정의 보기라면, 당신의 보기의 하위 요소를 찾고 필요한 애니메이션을 만들어야 합니다.
간단한 예를 보겠습니다.그래디언트 애니메이션을 구현하려면 다음과 같은 애니메이션 객체를 만들어야 합니다.
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
// if it's a custom view class, cast it here
// then find subviews and do the animations
// here, we just use the entire view for the fade animation
view.setAlpha( 0f );
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
fadeAnim.setDuration( 2500 );
fadeAnim.start();
}
};
그런 다음 Glide 요청에서 애니메이션을 설정해야 합니다.
Glide
.with( context )
.load( eatFoodyImages[1] )
.animate( animationObject )
.into( imageView2 );
물론 애니메이션 대상에 대한 애니메이션 방법에서 보기에 대한 모든 것을 할 수 있습니다.자유롭게 너의 애니메이션으로 만들어라.
사용자 정의 보기에서 실현하려면, 이 보기 대상을 만들고 사용자 정의 보기에서 사용자 정의 방법을 만듭니다.
5. 로드 완료 스니퍼 추가
Glide.with(ShowImgActivity.this)
.load(urlString)
.centerCrop()
.error(R.drawable.failed)
.crossFade()
.into(new GlideDrawableImageViewTarget(imageView) {
@Override
public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
super.onResourceReady(drawable, anim);
//
}
)};
6. 이미지 캐시 메커니즘
Glide 캐시 정책
Glide는 기본적으로 디스크 캐시와 메모리 캐시를 시작합니다. 물론 한 장의 그림에 대해 특정한 캐시 정책을 설정할 수도 있습니다.메모리 캐시에 그림을 추가하지 않기
Glide
.with( context )
.load( eatFoodyImages[0] )
.skipMemoryCache( true )
.into( imageViewInternet );
디스크 캐시에 그림을 추가하지 않기
Glide
.with( context )
.load( eatFoodyImages[0] )
.diskCacheStrategy( DiskCacheStrategy.NONE )
.into( imageViewInternet );
Glide는 여러 디스크 캐시 정책을 지원합니다.
DiskCacheStrategy.NONE: 그림을 캐시하지 않고 DiskCacheStrategy.SOURCE: 캐시 이미지 소스 파일 DiskCacheStrategy.RESULT: 캐시 수정된 그림 DiskCacheStrategy.All:모든 그림 캐시, 기본값
그림 로드 우선 순위
Glide는 이미지 로드에 대한 우선 순위 설정, 우선 순위가 높은 우선 로드, 우선 순위가 낮은 후 로드를 지원합니다.
private void loadImageWithHighPriority() {
Glide
.with( context )
.load( UsageExampleListViewAdapter.eatFoodyImages[0] )
.priority( Priority.HIGH )
.into( imageViewHero );
}
private void loadImagesWithLowPriority() {
Glide
.with( context )
.load( UsageExampleListViewAdapter.eatFoodyImages[1] )
.priority( Priority.LOW )
.into( imageViewLowPrioLeft );
Glide
.with( context )
.load( UsageExampleListViewAdapter.eatFoodyImages[2] )
.priority( Priority.LOW )
.into( imageViewLowPrioRight );
}
7. 라운드 이미지 로드
/**
*
*
* Created by on 2016/7/29.
*/
public class GlideCircleTransform extends BitmapTransformation {
public GlideCircleTransform(Context context) {
super(context);
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}
private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}
@Override
public String getId() {
return getClass().getName();
}
}
**그리고 사용할 때 이 말만 붙이면 돼요.transform(new GlideCircleTransform(context))**
Glide.with(mContext)
.load(imageUrl)
.transform(new GlideCircleTransform(mContext))
.into(holder.imageView);
8. 주요 사항(setTag)
프로젝트에 tag를 설정하면 다음과 같은 이상이 생길 거라고 믿습니다java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
glide를 사용할 이미지뷰에 tag를 직접 설정할 수 없습니다.
glide가 그림을 불러올 때 tag를 사용했기 때문에 충돌이 발생하고 오류가 발생할 수 있습니다.
tag로 논리 코드를 쓸 때 이렇게 할 수 있다
.setTag(R.string.xxx,xxx);그리고getTag(R.string.xxx);
9. 그림을 불러올 때 배경에 옅은 녹색 현상이 나타난다
이유: Glide의 기본 Bitmap 형식은 RGB 입니다.565, 이것도 그림을 불러오는 데 녹색이 될 수 있는 주범이다.RGB_565는 8비트 RGB 비트맵을 나타내고 Picasso의 기본 Bitmap 형식은 ARGB8888은 32비트의 RGB 비트맵을 대표하고 비트맵의 위치가 높을수록 저장할 수 있는 색 정보가 많을수록 이미지도 리얼해진다. 이것은 Picasso 이미지의 질이 더욱 좋은 이유이다.
우리가 Glide를 ARGB 로 설정하면 여기를 보시면 아실 거라고 믿습니다.8888이면 돼요. 맞아요. 사실 더 간단한 게 있어요. 표시된 네트워크 그림을 전체 크기의 캐시만 하면 돼요.
1. Glide를 사용하여 그림을 로드할 때 원래 크기를 로컬에 캐시합니다.
Glide.with(context)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)// 。
.into(imageview);
2、Bitmap의 형식을 ARGB 로 변경8888. 먼저 GlideConfiguration 클래스를 만들어서 GlideModule을 실현하고 Bitmap의 형식을 수정합니다.
public class GlideConfiguration implements GlideModule{
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
그리고 안드로이드 매니페스트에서xml에 추가됨:
data
android:name=" .GlideConfiguration"
android:value="GlideModule"/>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android Glide 이미지 로드(수신, 애니메이션 로드)with에 context,activity,fragment를 넣을 수 있습니다.;activity,fragment를 틀 때glide는 생명주기에 따라 그림을 불러옵니다.액티비티 사용을 추천합니다. 코드로 돌아가면 첫 번...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.