繁体   English   中英

如何在 onCreate 中使用 glide 获取位图?

[英]How can I get bitmap using glide in onCreate?

我正在使用MVVM模型。 所以我首先要做的是从改造中获取包含 URL 和其他内容的数据。

其次是从 URL 获取图像并在第一次处理后通知Viewpager 我做了第一个。 但是当我尝试第二个过程时,发生了错误

java.lang.IllegalArgumentException:您必须在后台线程上调用此方法

我参考了这个站点http://bumptech.github.io/glide/doc/getting-started.html#background-threads在后台线程上使用 glide。

我不必使用Asynctask来观察这是我开发的约束。 我该如何解决第二个过程?

 detailViewModel.getIndexItem().observe(this, Observer<DetailModel>(){  
                t->

            binding.item = t

            image_list = binding.item.thumbnail_list_320.toString().split("#")
            for(image in image_list) {
                val futureTarget: FutureTarget<Bitmap> = Glide.with(context)
                    .asBitmap()
                    .load(image)
                    .submit(500, 500)

                val bitmap = futureTarget.get()
                bitmaps.add(bitmap).apply {
                    if(this){
                        viewPagerAdapter.notifyDataSetChanged()
                        transitionLayout.visibility=View.GONE                             
                        detailLayout.visibility=View.VISIBLE
                    }
                }
            }
        })

如果你想在 UI 线程上获取位图,实现如下,你可以尝试

detailViewModel.getIndexItem().observe(this, Observer<DetailModel>(){
            t->

        binding.item = t

        image_list = binding.item.thumbnail_list_320.toString().split("#")
        for(image in image_list) {
            Glide.with(this)
                .asBitmap()
                .override(500, 500)
                .load("image url")
                .into( object: CustomTarget<Bitmap>() {
                    override fun onResourceReady(
                        bitmap: Bitmap,
                        transition: Transition<in Bitmap>?
                    ) {
                        // UI Thread
                        Log.e(TAG, "$bitmap")
                        bitmaps.add(bitmap).apply {
                            if(this){
                                viewPagerAdapter.notifyDataSetChanged()
                                transitionLayout.visibility=View.GONE
                                detailLayout.visibility=View.VISIBLE
                            }
                        }
                    }

                    override fun onLoadCleared(placeholder: Drawable?) {

                    }

                })

        }
    })

java中的简单优雅:

Bitmap bitmap;
Glide.with(mContext).load(PHOTOURL).apply(options).listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                 bitmap = resource;
                }
            }).into(IMAGEVIEW);

implementation 'com.github.bumptech.glide:glide:4.10.0' 请注意,它是异步的并且需要一些时间来加载位图。 我希望它有帮助。 此致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM