[android] Glide-4.0.0 누락 된 자리 표시 자, 오류, GlideApp 및 메서드 자리 표시 자, 오류를 해결하지 못함

Glide Android 라이브러리를 사용하여 이미지를 다운로드하고 ImageView.

이전 버전에서는 다음을 사용했습니다.

Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
                .error(R.drawable.ERROR_IMAGE_NAME)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

하지만 글라이드 문서를 보았습니다.

GlideApp.with()대신 사용 을 말한다Glide.with()

내 관심사는 누락 된 자리 표시 자, 오류, GlideApp 및 기타 옵션입니다.

나는 사용하고있다

 compile 'com.github.bumptech.glide:glide:4.0.0'

내가 어디에서 잘못하고 있습니까? 여기를 참조 하십시오 .

어떻게 GlideApp.with()사용 되었습니까?

API는와 동일한 패키지에서 생성 되며 기본적으로 AppGlideModule이름이 지정 GlideApp됩니다. 애플리케이션 GlideApp.with()Glide.with()다음 대신 모든로드를 시작하여 API를 사용할 수 있습니다 .

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);



답변

RequestOptions를 사용해보십시오 .

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);

Glide.with(context)
     .setDefaultRequestOptions(requestOptions)
     .load(url).into(holder.imageView);

편집하다

경우 .setDefaultRequestOptions(requestOptions), 사용을 작동하지 않습니다 .apply(requestOptions):

Glide.with(MainActivity.this)
            .load(url)
            .apply(requestOptions)
            .into(imageview);
 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
            .into(imageview);

 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
            .into(imageview);

2 보너스 수정

Glide-4의 다른 변경 사항은 다음과 같습니다.


답변

Glide 패키지 종속성 compile 'com.github.bumptech.glide:glide:3.7.0'을 사용하는 경우를 사용하여 아래 코드를 사용해야합니다.

GlideApp
    .with(your context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_image)
    .error(R.drawable.error_image)
    .into(myImageView);

참고 : 마찬가지로 문서 ,

원형 그림 : CircleImageView / CircularImageView / RoundedImageView는 TransitionDrawable (.crossFade () with .thumbnail () 또는 .placeholder ()) 및 애니메이션 GIF에 문제가있는 것으로 알려져 있습니다. BitmapTransformation (.circleCrop ()은 v4에서 사용할 수 있음) 또는 .dontAnimate ()를 사용하여 문제를 해결하십시오.

최신 업데이트 버전 compile com.github.bumptech.glide:glide:4.1.1은 아래 코드를 사용해야합니다.

RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH)
                    .dontAnimate()
                    .dontTransform();

Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

최신 버전의 글라이드, 버그 수정 및 기능을 확인 하세요.


답변

GlideApp을 사용 dependencies하려면 스크린 샷과 같이 주석 처리기 에 추가해야 합니다.

프로젝트에 GlideApp을 추가하는 방법

그런 다음 애플리케이션에 AppGlideModule 구현을 포함합니다.

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

@GlideModule주석을 잊지 마십시오 . 그런 다음 프로젝트를 빌드해야합니다. 그리고 GlideApp자동으로 생성됩니다.


답변

종속성 :

compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'

적절하게 주석이 달린 AppGlideModule 구현을 추가합니다.

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

또한 잭 옵션을 사용한 경우 다음과 같은 유사한 오류를 피하기 위해 Android Studio 3.0.0 미리보기를 사용해야합니다.

오류 : ‘: app : transformJackWithJackForDebug’작업에 대한 실행이 실패했습니다. com.android.jack.ir.JNodeInternalError : java.lang.Exception : java.lang.AssertionError : 아직 구현되지 않음


답변

RequestOptions도 사용할 필요가 없습니다.

생성 된 API는 RequestBuilder 및 RequestOptions 하위 클래스에 대한 액세스를 제공하는 GlideApp 클래스를 추가합니다. RequestOptions 하위 클래스에는 RequestOptions의 모든 메서드와 GlideExtensions에 정의 된 모든 메서드가 포함됩니다. RequestBuilder 서브 클래스는 apply를 사용하지 않고도 생성 된 RequestOptions 서브 클래스의 모든 메소드에 대한 액세스를 제공합니다.

글라이드 사용 :-

생성 된 API가없는 요청은 다음과 같습니다.

Glide.with(fragment)
    .load(url)
    .apply(centerCropTransform()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH))
    .into(imageView);

GlideApp 사용 :-

생성 된 API를 사용하여 RequestOptions호출을 인라인 할 수 있습니다.

GlideApp.with(fragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .priority(Priority.HIGH)
    .into(imageView);

생성 된 RequestOptions 서브 클래스를 사용하여 동일한 옵션 세트를 여러로드에 적용 할 수 있지만 생성 된 RequestBuilder 서브 클래스가 대부분의 경우 더 편리 할 수 ​​있습니다.


답변

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)


답변

앱의 모든 곳에서 공통 자리 표시자를 사용하려면 다음과 같이 할 수 있습니다.

Glide v4 에서 GlideModule 을 만들 때이 클래스를 프로젝트에 복사 / 붙여 넣기하여 GlideApp 클래스 를 사용할 수 있습니다 (추가 단계는 다음을 따르십시오) .

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
        builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
    }

    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
    }
}

여기에서 모든 요청 옵션을 제공하여 기본값 으로 설정할 수 있습니다 .

이 클래스를 생성하면와 .placeholder함께 사용할 필요가 없으며 GlideApp자동으로 적용됩니다.