Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Glide 4.6.1自定义变换时图像闪烁_Android_Kotlin_Android Glide - Fatal编程技术网

Android Glide 4.6.1自定义变换时图像闪烁

Android Glide 4.6.1自定义变换时图像闪烁,android,kotlin,android-glide,Android,Kotlin,Android Glide,我有以下自定义转换(kotlin): 当我像下面那样在回收器视图中使用它时,图像会闪烁和反弹。从我所读到的一切来看,它与不正确地实现updateDiskCacheKey,hashCode,以及equals有关。我从一开始就严格按照位图转换中的说明进行操作 Glide.with(icon) .load(url) .apply(RequestOptions() .transform(IconTransfo

我有以下自定义转换(kotlin):

当我像下面那样在回收器视图中使用它时,图像会闪烁和反弹。从我所读到的一切来看,它与不正确地实现
updateDiskCacheKey
hashCode
,以及
equals
有关。我从一开始就严格按照
位图转换中的说明进行操作

    Glide.with(icon)
            .load(url)
            .apply(RequestOptions()
                    .transform(IconTransformation())
                    .error(errorDrawableRes))
            .into(icon)

问题在行
池中。put(img)
变为以下解决问题:

if (img != toTransform) {
    pool.put(img)
}

问题在行
池中。put(img)
变为以下解决问题:

if (img != toTransform) {
    pool.put(img)
}
我的评论可能会有所帮助

我使用占位符来解决闪烁问题。Dont转换不起作用 在我的应用程序中不工作。在搜索了Glide的源代码之后,我 查找问题可能来自ImageViewTarget:

/**
   * Sets the given {@link android.graphics.drawable.Drawable} on the view using {@link
   * android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable)}.
   *
   * @param placeholder {@inheritDoc}
   */
  @Override
  public void onLoadStarted(@Nullable Drawable placeholder) {
    super.onLoadStarted(placeholder);
    setResourceInternal(null);
    setDrawable(placeholder);
  }
因此,若占位符为空,ImageView将在之后立即变为空 每次装货。所以我在ImageView中缓存最后一个图像并设置它 作为下一次加载的占位符。这是密码

// init
mGlideOpt = new RequestOptions().dontAnimate().skipMemoryCache(false);
mGlideRB = Glide.with(imageView).asBitmap();

// loading
Drawable drawable = mImageView.getDrawable();
if (drawable != null) {
    mGlideOpt = mGlideOpt.placeholder(drawable);
}
mGlideRB.apply(mGlideOpt).load(mCacheFile).into(mImageView);
只是一个临时工作。希望能有帮助

我的评论可能会有所帮助

我使用占位符来解决闪烁问题。Dont转换不起作用 在我的应用程序中不工作。在搜索了Glide的源代码之后,我 查找问题可能来自ImageViewTarget:

/**
   * Sets the given {@link android.graphics.drawable.Drawable} on the view using {@link
   * android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable)}.
   *
   * @param placeholder {@inheritDoc}
   */
  @Override
  public void onLoadStarted(@Nullable Drawable placeholder) {
    super.onLoadStarted(placeholder);
    setResourceInternal(null);
    setDrawable(placeholder);
  }
因此,若占位符为空,ImageView将在之后立即变为空 每次装货。所以我在ImageView中缓存最后一个图像并设置它 作为下一次加载的占位符。这是密码

// init
mGlideOpt = new RequestOptions().dontAnimate().skipMemoryCache(false);
mGlideRB = Glide.with(imageView).asBitmap();

// loading
Drawable drawable = mImageView.getDrawable();
if (drawable != null) {
    mGlideOpt = mGlideOpt.placeholder(drawable);
}
mGlideRB.apply(mGlideOpt).load(mCacheFile).into(mImageView);
只是一个临时工作。希望能有帮助