グライドを使用して画像を読み込もうとしていますが、どういうわけかグライドを使用して画像を読み込めません。次のエラーが表示されます:
GeneratedAppGlideModuleが見つかりませんでした。アプリケーションにcomment.github.bumptech.glide:compilerへのannotationProcessorコンパイル依存関係を含める必要があり、@ GlideModule注釈付きAppGlideModule実装またはLibraryGlideModulesは黙って無視されます。
このソリューション も参照しました。しかし、私はすでに更新されたグライドのバージョンを持っています。
私のグラドルに、私は追加しました
implementation 'com.github.bumptech.glide:glide:4.7.1'
そして
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
コード
[〜#〜] xml [〜#〜]
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
tools:context=".view.SettingActivity">
<data>
<variable
name="settingsViewModel"
type="com.sevenbits.Android.mvvmsample.viewmodel.SettingsViewModel"/>
</data>
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/splash_bg">
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<LinearLayout
Android:id="@+id/profile"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="20dp"
Android:background="@color/white"
Android:elevation="10dp"
Android:orientation="vertical"
Android:padding="5dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<de.hdodenhof.circleimageview.CircleImageView
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:layout_gravity="center"
Android:layout_margin="10dp"
app:image_url="@{settingsViewModel.imageUrl}"
app:civ_border_width="2dp"
app:civ_border_color="@color/colorPrimary"/>
...
</LinearLayout>
</Android.support.constraint.ConstraintLayout>
</ScrollView>
CustomBindingAdapter
public class CustomBindingAdapter {
@BindingAdapter({"bind:image_url"})
public static void loadImage(ImageView imageView, String url) {
RequestOptions requestOptions = new RequestOptions();
requestOptions=requestOptions.placeholder(R.drawable.boy_32);
Glide.with(imageView.getContext())
.load(url)
.apply(requestOptions)
.into(imageView);
}
最後に、答えを見つけました こちら 。
私がやった事 :
ステップ-1
GlideApp
という名前の空のクラスを作成しました
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public class GlideApp extends AppGlideModule {
}
注:注釈を追加することを忘れないでください@GlideModule
。
Step-2その後、プロジェクトをビルド/リビルドし、Glide
をGlideApp
に置き換えました。 RequestOptions
を使用する必要はありません。
public class CustomBindingAdapter {
@BindingAdapter({"bind:image_url"})
public static void loadImage(ImageView imageView, String url) {
// RequestOptions requestOptions = new RequestOptions();
// requestOptions=requestOptions.placeholder(R.drawable.boy_32);
GlideApp.with(imageView.getContext())
.load(url)
.placeholder(R.drawable.boy_32)
.into(imageView);
// Glide.with(imageView.getContext())
// .load(url)
// .apply(requestOptions)
// .into(imageView);
}
}
編集:androidxおよびGlide versin 4.9.0の場合:
私のアプリのgradle.buildで:
implementation ("com.github.bumptech.glide:glide:4.9.0") {
exclude group: "com.Android.support"
}
annotationProcessor 'androidx.annotation:annotation:1.0.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation ("com.github.bumptech.glide:glide:4.9.0@aar") {
transitive = true
}
私のgradle.propertiesで:
Android.enableJetifier=true
Android.useAndroidX=true
それで全部です。
Kotlin Solution:
gradleファイルに以下を追加していることを確認してください(annotationProcessorをkapt source に置き換えてください):
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
kapt 'com.github.bumptech.glide:compiler:4.8.0'
}
アプリケーションにAppGlideModule実装を追加 GlideSource (デフォルトのメソッドをオーバーライドできます overrideSource ):
import Android.content.Context
import com.bumptech.glide.GlideBuilder
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.signature.ObjectKey
@GlideModule
class AppNameGlideModule : AppGlideModule() {
override fun applyOptions(context: Context, builder: GlideBuilder) {
super.applyOptions(context, builder)
builder.apply { RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL).signature(ObjectKey(System.currentTimeMillis().toShort())) }
}
}
グライドを使用しながら、Glideの代わりにGlideAppを使用します、例:
GlideApp.with(context)
.load(url)
.into(imageView)
AndroidXでGlide:4.9.0
でこの問題に直面しました
このように解決しました
Gradle.propertiesでAndroid.useAndroidX = true
Android.enableJetfier=true
あなたのbuild.gradleで//Glide dependency implementation 'com.github.bumptech.glide:glide:4.9.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
次に、CustomGlideModule
を追加します@GlideModule public class CustomeGlideModule extends AppGlideModule {}
最後のステップはGlideModuleを生成します
ビルド >> プロジェクトの作成ビルドフォルダーに生成されたモジュールが表示されます
上記の答えはすべて真であり、正常に動作します
しかし、#placeholderおよび#errorメソッドを使用すると、ビルドなしでグライドがうまく機能することに気付きましたGlideModule上記のクラス
例:このようなグライドを使用する場合はWordではなく、ビルドする必要がありますGlideModule
Glide.with(this)
.load(uri)
.into(imageView);
これはうまくいく
Glide.with(this).load(uri).placeholder(Android.R.drawable.progress_indeterminate_horizontal).error(Android.R.drawable.stat_notify_error).into(imageView);
Ridhiの回答に加えて:
正しく動作させるには、isManifestParsingEnabled
を含める必要がありました。
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public class MyGlideApp extends AppGlideModule {
@Override
public boolean isManifestParsingEnabled() {
return false;
}
}