当互联网速度很慢时,Glide需要很长时间来显示图像,我需要立即显示图像.
我有表示问题RecyclerView用StaggeredGridLayoutManager其项包含一个imageview和所述图像中装入imageview使用glide.我面临的问题是,在图像加载后,它们不会交错并且尺寸相同,两列之间也存在很大的差距.如何在列中没有间隙的情况下改变图像的高度?
android staggered-gridview staggeredgridlayout android-recyclerview android-glide
情况是这样的:我有一个活动,它有一个工具栏、一个 Tablayout 和一个 View Pager(将包含 5 个片段)
在第一个片段中,我有一个布局,其中将包含一个默认片段,该片段将具有一个包含两列的 Recycler 视图。上面的每个元素都有一张从 Internet 下载的图像(使用 Glide 并保存在缓存中),当用户单击支架(列表中的一个元素)时,会将“布局容器”上的这个默认片段更改为另一个将有一个新的 Recycler View,其中包含使用 Glide 从 Internet 下载的图像。类似于 Instagram 搜索页面。
我认为 Glide 是问题所在,但我对所有代码进行了注释,当我在模拟器上运行该应用程序时,它会消耗更多或更少的 89 MB RAM。
额外的信息
(在 Activity 内的视图寻呼机内的片段内)
MySingleton.getInstance(getContext()).addToRequestQueue(req);
Run Code Online (Sandbox Code Playgroud)
然后它下载图片 URL 并使用 Glide 在视图上收费。
if(holder.publication.getPicture() != null ){
Glide.with(holder.ctx).load(holder.publication.getPicture()).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(holder.picture_imgView);
}
Run Code Online (Sandbox Code Playgroud)
我没有使用静态变量
此外,我从 Recycler View 元素中删除了所有动画,但仍然很慢。
我使用 Android 监视器和“Jump Java Heap”选项来查看它是如何管理内存的,并且主编号在 Byte[] 上(我不明白使用这个工具)
非常感谢!
更新 在我的日志中,我总是得到这个:
W/ViewRootImpl: Dropping event …Run Code Online (Sandbox Code Playgroud) android android-fragments android-recyclerview android-glide
我有 ImageView 的简单布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.vbusovikov.glidetest.MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
和简单的 Glide 表达式加载图像到这个 ImageView 只是为了测试 Glide
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView)findViewById(R.id.image);
Glide.with(this)
.load("http://you-ps.ru/uploads/posts/2013-08/1376601606_1273.png")
.error(R.mipmap.ic_launcher)
.into(imageView);
}
Run Code Online (Sandbox Code Playgroud)
但是,会显示错误图标。它可能是什么问题?我的网络上有代理服务器,并且有适合这种情况的 gradle.properties。
systemProp.http.proxyHost=proxy******.ru
systemProp.http.proxyPort=****
Run Code Online (Sandbox Code Playgroud)
但即使我尝试在任何代理之外启动这个小应用程序,它也不会出于某种原因工作。
我的 build.gradle 文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.vbusovikov.glidetest"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled …Run Code Online (Sandbox Code Playgroud) 所以我在我的应用程序中到处使用 glide 来通过 url 上传用户的个人资料图片。当用户更改他们的个人资料图片时。我更新了后端,所以更新了 url。但是,glide 已经缓存了旧图像。我如何覆盖之前缓存的图像,以便当用户浏览应用程序时,他/她可以在所有活动中看到他们的个人资料图片的变化?
我正在使用 Glide 从我的手机内存中加载图像。我的图像视图定义为:
ImageView ivx=(ImageView)view.findViewById(R.id.ivx);
Run Code Online (Sandbox Code Playgroud)
使用 Glide 将手机中的图像加载到图像视图中的代码是:
Glide.with(getActivity()).load(new File("/storage/emulated/0/somefolder/MEDIA/PROFILEIMAGES/PROFILE_image1.jpg").toString())
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
Log.e("xmx1","Error "+e.toString());
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
Log.e("xmx1","no Error ");
return false;
}
})
.into(ivx);
Run Code Online (Sandbox Code Playgroud)
我一直面临的问题是这段代码抛出了一个异常:
Error java.lang.RuntimeException: setDataSource failed: status = 0x80000000
Run Code Online (Sandbox Code Playgroud)
我检查了文件,文件在文件夹中!但是 Glide 并没有将图像文件加载到图像视图中!
有人可以告诉我我做错了什么!
提前致谢
我已将Glide的版本从4.0.0-RC0升级到4.4.0.但它给我一个错误的说法
Error:Module 'com.github.bumptech.glide:glide:4.4.0' depends on one or more Android Libraries but is a jar
Run Code Online (Sandbox Code Playgroud)
它不是说哪个罐子或任何其他信息.有人知道如何解决这个问题吗?我还在build.gradle中附加了Glide的条目
compile 'com.github.bumptech.glide:glide:4.4.0'
compile 'com.github.bumptech.glide:okhttp3-integration:4.4.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'
compile 'com.github.bumptech.glide:annotations:4.4.0'
Run Code Online (Sandbox Code Playgroud)
编辑:我正在使用支持库版本27.0.1
我有一个使用 Glide 3.5.2 的旧项目。下面的工作正常。
Glide.with(context)
.load(url)
.override(IMAGE_SIZE_FIX, IMAGE_SIZE_FIX)
.crossFade()
.placeholder(placeholder)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
但是,现在我将 Glide 更新到 4.5.0。它抱怨
Error:(35, 24) error: cannot find symbol method override(int,int)
Run Code Online (Sandbox Code Playgroud)
我尝试从Glide-4.0.0 Missing placeholder, error, GlideApp解决overide(int,int)问题的答案
。但随后就crossfade()成了问题。
我尝试的方法如下...
Glide.with(context)
.load(url)
.apply(new RequestOptions().override(IMAGE_SIZE_FIX, IMAGE_SIZE_FIX).placeholder(placeholder))
.crossFade()
.into(imageView);
Glide.with(context)
.load(url)
.apply(new RequestOptions().override(IMAGE_SIZE_FIX, IMAGE_SIZE_FIX).placeholder(placeholder).crossFade())
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
两者都不起作用。抱怨
Error:(51, 17) error: cannot find symbol method crossFade()
Run Code Online (Sandbox Code Playgroud)
我怎么申请.crossFade()?
我正在使用 Glide 库上传图片。在我的另一个应用程序中,我使用此代码
void imageButtonclick() {
iv1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CropImage.activity(filePath).setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1,1).setOutputCompressQuality(50).start(UploadBook.this);
// Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//intent.putExtra(MediaStore.EXTRA_OUTPUT,imageuri);
//startActivityForResult(intent, CAMERA_REQUEST_CODE);
}
});
Run Code Online (Sandbox Code Playgroud)
通过声明来减小图像的大小.setOutputCompressQuality(50)但我不知道如何对 Glide Image library 做同样的事情。
我的代码是
public static void loadLocalImage(Context ctx, RequestOptions glideRequests, Uri uri, ImageView imageView,
RequestListener listener) {
glideRequests.fitCenter()
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(ctx)
.applyDefaultRequestOptions(glideRequests.placeholder(R.drawable.ic_stub).error(R.drawable.ic_stub))
.asBitmap()
.load(uri)
.listener(listener)
.into(imageView);
}
Run Code Online (Sandbox Code Playgroud) 我试图找到如何在图像按钮中设置 GIF 图像并将其设置为仅播放一次。
SetContentView(Resource.Layout.activity_main);
var ib_main_home = FindViewById<ImageButton>(Resource.Id.ds);
Glide.With(this).AsGif()
.Load(Resource.Mipmap.giphy)
.Into(ib_main_home);
Run Code Online (Sandbox Code Playgroud)