Rid*_*dhi 18 data-binding android android-glide
我试图使用滑动加载图像但不知何故我无法使用滑动加载图像.因为它显示以下错误:
无法找到GeneratedAppGlideModule.您应该在com.github.bumptech.glide中包含annotationProcessor编译依赖项:应用程序中的编译器和@GlideModule带注释的AppGlideModule实现或者LibraryGlideModules将被静默忽略.
我也提到了这个解决方案.但是,我已经有了更新的滑行版本.
在我的gradle中,我补充说
implementation 'com.github.bumptech.glide:glide:4.7.1'
Run Code Online (Sandbox Code Playgroud)
和
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
Run Code Online (Sandbox Code Playgroud)
码
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>
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
Rid*_*dhi 30
最后,我在这里找到了答案.
我做了什么:
步骤1
我创建了一个名为的空类 GlideApp
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public class GlideApp extends AppGlideModule {
}
Run Code Online (Sandbox Code Playgroud)
注意:不要忘记添加注释@GlideModule.
第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);
}
}
Run Code Online (Sandbox Code Playgroud)
就这样.
Ars*_*hak 13
Kotlin解决方案:
确保在gradle文件中添加了以下内容(用kapt source替换注解Processor ):
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
kapt 'com.github.bumptech.glide:compiler:4.8.0'
}
Run Code Online (Sandbox Code Playgroud)
添加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())) }
}
}
Run Code Online (Sandbox Code Playgroud)
使用滑行时,请使用GlideApp代替Glide,例如:
GlideApp.with(context)
.load(url)
.into(imageView)
Run Code Online (Sandbox Code Playgroud)
小智 9
我遇到过这个问题 Glide:4.9.0用AndroidX 时
就这样解决了
在你的 gradle.properties 中
android.useAndroidX = true
android.enableJetifier=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
Build >> Make Project,您应该会在 build 文件夹中看到生成的模块
以上所有答案都是正确的并且工作正常
但我注意到当使用#placeholder和#error方法时,glide 可以正常工作,无需构建GlideModule类,如上所述
示例:当像这样使用 glide 时不起作用并且必须构建GlideModule
Glide.with(this)
.load(uri)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
这是工作正常
Glide.with(this).load(uri).placeholder(android.R.drawable.progress_indeterminate_horizontal).error(android.R.drawable.stat_notify_error).into(imageView);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16245 次 |
| 最近记录: |