首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecyclerView中的矢量绘图加载

RecyclerView中的矢量绘图加载
EN

Stack Overflow用户
提问于 2018-03-28 19:59:55
回答 1查看 559关注 0票数 0

我需要根据不同的情况加载VectorDrawable资源到回收器视图中的图像视图。当前的实现每次都会实例化一个新的drawable,我敢肯定,这会导致列表中大量项目的性能损失。我想改变它,以便有效地重用可绘制的对象,以减少创建的对象的数量。我正在使用毕加索,我想把这项工作委托给它可能是一个好主意,但看起来毕加索无法加载VectorDrawable的。有什么方法可以管理它吗?

UPD。该资源使用ContextCompat.getDrawable加载,并使用setImageDrawable设置。在onViewRecycled中清除可绘制的ImageView

EN

回答 1

Stack Overflow用户

发布于 2018-03-28 20:50:00

我能想到的唯一解决方案是将动态可绘制图像的加载从UI线程转移到后台线程。要使加载更加流畅,您需要使用适配器中的AsyncTask异步加载图像。这将减轻UI线程的负担,并使用户体验更好。你不能使用毕加索,因此我推荐一个简单的AsyncTask。

我找到了一个很好的代码片段,看一下:

代码语言:javascript
复制
public View getView(int position, View convertView,
        ViewGroup parent) {
    ViewHolder holder;

    ...

    holder.position = position;

    new ThumbnailTask(position, holder)
            .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);

    return convertView;
}

private static class ThumbnailTask extends AsyncTask {
    private int mPosition;
    private ViewHolder mHolder;

    public ThumbnailTask(int position, ViewHolder holder) {
        mPosition = position;
        mHolder = holder;
    }

    @Override
    protected Cursor doInBackground(Void... arg0) {
        // Download bitmap here
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (mHolder.position == mPosition) {
            mHolder.thumbnail.setImageBitmap(bitmap);
        }
    }
}

private static class ViewHolder {
    public ImageView thumbnail;
    public int position;
}

有关更多信息,请查看this链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49533982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档