gpt4 book ai didi

android - 如何立即刷新 ImageView

转载 作者:可可西里 更新时间:2023-11-01 18:49:36 25 4
gpt4 key购买 nike

在我的安卓应用中,我从云端下载了一张图片。下载是在一个线程中执行的,在同一个线程中,我还使用新下载的图像设置了一个 ImageView 。设置图像后,我调用 postinvalidate()

但是图像不会立即显示出来。有没有办法让重绘立即发生?我需要一种方法来触发绘图周期。

最佳答案

从 View 类派生的每个类都有 invalidate()postInvalidate() 方法。如果 invalidate() 被调用,它会告诉系统当前 View 已更改并且应该尽快 重新绘制。由于此方法只能从您的 UIThread 调用,因此当您UIThread 中但仍想通知系统时,需要另一种方法您的 View 已更改。 postInvalidate() 方法从一个非 UIThread 通知系统,并尽快在 UIThread 上的 next eventloop 重绘 View .

在您的情况下,您可以在 AsyncTask(智能后台线程)的帮助下实现您想要的。AsyncTask 可以正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作(在您的情况下在后台下载图像)并发布结果(将位图设置为 ImageView),而无需操作线程和/或处理程序。

异步任务由在后台线程上运行的计算定义,其结果在 UI 线程上发布。异步任务由3 种通用类型(称为Params、Progress 和Result)和4 个步骤(称为begin、doInBackground、processProgress 和end)定义。

4个步骤

当一个异步任务被执行时,任务会经历4个步骤:

onPreExecute(),在任务执行后立即在 UI 线程上调用。此步骤通常用于设置任务,例如在从云端下载图像之前在用户界面中显示进度条,用于提供良好的用户体验。

doInBackground(Params...),在 onPreExecute() 完成执行后立即在后台线程上调用。此步骤用于执行可能需要很长时间的后台计算。异步任务的参数传递给这一步。计算结果必须由这一步返回,并传回最后一步。此步骤还可以使用 publishProgress(Progress...) 来发布一个或多个进度单元。这些值在 onProgressUpdate(Progress...) 步骤中发布在 UI 线程上。

onProgressUpdate(Progress...),在调用 publishProgress(Progress...) 后在 UI 线程上调用。执行时间未定义。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。

onPostExecute(Result),在后台计算完成后在 UI 线程上调用。后台计算的结果作为该方法中的参数传递给此步骤,您可以将位图设置为您的 imageView 并使您的 View 无效

关于android - 如何立即刷新 ImageView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11893826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com