Android 显示图像时不锁定";“主要”;线
我的申请遇到了问题。我正在将一系列内部iPad应用程序从iOS移植到android,图像序列是它们设计中不可或缺的一部分。它们需要标准的全屏停止、启动、暂停功能,所有这些功能在ImageView的子类中都可以正常工作。但在锁定进程对话框持续出现之前,它目前只显示了300幅图像中的2幅 那么,有没有一种“好”的方法可以在不锁定主线程的情况下设置图像/背景呢Android 显示图像时不锁定";“主要”;线,android,imageview,android-4.0-ice-cream-sandwich,android-imageview,Android,Imageview,Android 4.0 Ice Cream Sandwich,Android Imageview,我的申请遇到了问题。我正在将一系列内部iPad应用程序从iOS移植到android,图像序列是它们设计中不可或缺的一部分。它们需要标准的全屏停止、启动、暂停功能,所有这些功能在ImageView的子类中都可以正常工作。但在锁定进程对话框持续出现之前,它目前只显示了300幅图像中的2幅 那么,有没有一种“好”的方法可以在不锁定主线程的情况下设置图像/背景呢 仅供参考,animatedravable并不适合我的需要,因为它不提供暂停/恢复功能,而且我拥有的序列数量很容易达到数百个,平均只有几百帧长。
仅供参考,animatedravable并不适合我的需要,因为它不提供暂停/恢复功能,而且我拥有的序列数量很容易达到数百个,平均只有几百帧长。您可以使用异步加载图像 只需将与图像加载相关的代码放入doInBackground方法中即可 并尝试设置进度条或进度对话框之类的指示器 因此,您将在加载开始时开始显示对话框或栏 完成后,使用onPostExecute方法中的处理程序关闭对话框 示例代码:
class SomeClass extends Activity {
protected ProgressDialog pd ;
protected Handler handler = new Handler(){
@Override
public void handleMessage(int what){
if(pd.isShowing())
pd.dismiss();
}
.....
class LoadImageTask extends AsyncTask<URL, Integer, Long> {
protected void onPreExecute(Long result) {
pd = ProgressDialog.show(getContext(),"Title","Message");
}
protected Long doInBackground(URL... urls) {
//Load IMAGEs code
return totalSize;
}
protected void onPostExecute(Long result) {
//finish loadiing images
handler .sendEmptyMessage(0);
}
}
}
class SomeClass扩展活动{
保护性帕金森病;
受保护的处理程序=新处理程序(){
@凌驾
公共无效handleMessage(int what){
if(pd.isShowing())
pd.解散();
}
.....
类LoadImageTask扩展了AsyncTask{
受保护的void onPreExecute(长期结果){
pd=ProgressDialog.show(getContext(),“Title”,“Message”);
}
受保护的长doInBackground(URL…URL){
//加载图像代码
返回总大小;
}
受保护的void onPostExecute(长结果){
//完成加载图像
handler.sendEmptyMessage(0);
}
}
}
我希望这能帮助你对穆罕纳德的回答补充几点:
- 您不必在AsyncTask中执行,线程就可以了
- 您可能希望将图像渲染为专用位图,然后使用渲染它以节省在UI线程中渲染所花费的时间