在将图像显示到ImageView时,UI冻结

时间:2017-01-10 09:35:00

标签: android android-recyclerview android-imageview universal-image-loader

在我的RecyclerView行中,我有一个ImageView,我希望在同一活动中预览此ImageView图片(全屏预览)

为此,我这样做:

public void showImageZoomable(String imageURL) {

imageViewZoomable.setVisibility(View.VISIBLE);

DisplayImageOptions options = new DisplayImageOptions.Builder().cacheOnDisk(true).build();

imageLoader.loadImage(imageURL , options, new ImageLoadingListener() {
    @Override
    public void onLoadingStarted(String imageUri, View view) {

    }

    @Override
    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

    }

    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

        imageViewZoomable.setImage(ImageSource.bitmap(loadedImage));
    }

    @Override
    public void onLoadingCancelled(String imageUri, View view) {

    }
});
toolBar.setVisibility(View.GONE);
getActivity().findViewById(R.id.tabs).setVisibility(View.GONE);

}

当用户点击ImageView(在Recyclerview的行上)并且它获取该图片的网址(图片已被缓存)时,会触发上述功能 并使用imageLoader

将其分配给imageViewZoomable

它工作正常,但整个过程有点慢和滞后

任何想法如何改进?或者我这样做的方式效率不高,请建议我一个更好的选择

3 个答案:

答案 0 :(得分:0)

尝试使用

  imageLoader.displayImage(imageURL, imageViewZoomable);

而不是

  imageLoader.loadImage(...);

答案 1 :(得分:0)

当用户在recyclerview项目中单击图像时,您可以使用全屏对话框(扩展DialogFragment)来显示全屏图像

答案 2 :(得分:0)

如果您的自定义类将imageView对象(如imageViewZoomable.getImage())作为imageView返回,则可以使用以下代码,以便您可以像下面一样传递它。

imageLoader.displayImage(imageURL, imageViewZoomable.getImage());