我有问题滚动磁盘上相当大的图像(每个大约1 Mb)现在我遇到的问题不是每个图像之间的延迟,而是在加载图像时图像的滚动(我使用它)在加载图像时保持被检测到的信号,在最终加载时导致移动的图像。我的问题很简单。有没有办法等到图像加载(这样我可以阻止屏幕命令,直到图像完全加载)。
感谢您的回答!
PD:顺便说一句,我在ImageView中加载页面;
编辑:
发布AsyincCode:
这是我的测试活动itests.java
public class ImageLoader extends AsyncTask<String, Void, Void > {
private final ProgressDialog Loading = new ProgressDialog(itests.this);
protected void onPreExecute(){
Loading.setMessage("Loading...");
Loading.show();
}
@Override
protected Void doInBackground(String... params) {
pvm.setPages(params[0], params[1], params[2]);
return null;
}
protected void onPostExecute(Void... params){
if (Loading.isShowing()){
Loading.dismiss();
}
}
现在pvm是我的PageViewManager(PageView是我的自定义ImageView,它接收我所有的触摸事件)
这是它的作用:
public void setPages(String left, String center, String right){
//if (!timer.isAlive()){
Left = left;
Center = center;
Right = right;
DoublePageMode = true;
toggleDoublePageMode();
System.err.println("Waiting...");
//centerPage.blockCommands();
//timer.start();
//}
}
@Override
public void toggleDoublePageMode(){
if (DoublePageMode){
//Going into Normal View
threePageLayout.setOrientation(LinearLayout.HORIZONTAL);
leftPage.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams cll = new LinearLayout.LayoutParams(DWidth,DHeight);
LinearLayout.LayoutParams zero = new LinearLayout.LayoutParams(0,DHeight);
centerPage.setImage(Center, DWidth, DHeight, PageState.NORMAL);
centerPage.setLayoutParams(cll);
leftPage.setImage(Left, DWidth, DHeight, PageState.NORMAL);
leftPage.setLayoutParams(zero);
rightPage.setImage(Right, DWidth, DHeight, PageState.NORMAL);
rightPage.setLayoutParams(zero);
DoublePageMode = false;
}
else{
DoublePageMode = true;
threePageLayout.setOrientation(LinearLayout.VERTICAL);
leftPage.setVisibility(View.GONE);
LinearLayout.LayoutParams cll = new LinearLayout.LayoutParams(DWidth,DHeight,1f);
LinearLayout.LayoutParams zero = new LinearLayout.LayoutParams(DWidth,DHeight,1f);
centerPage.setImage(Center, DWidth, DHeight, PageState.TWOPAGEMODE);
centerPage.setLayoutParams(cll);
rightPage.setImage(Right, DWidth, DHeight, PageState.TWOPAGEMODE);
rightPage.setLayoutParams(zero);
}
}
@Override表示法是因为还必须从LongTouch上的PageView调用该函数。但是我没有做任何长按,所以这不是问题。由于AsyncTask试图移动显示图像的活动的布局,我得到了我告诉你的错误,这很有道理。
当我需要调用此方法时,它来自此代码(在itests.java上):
public void movePages(boolean next) {
//Code that initializes left,center,right
new ImageLoader().execute(left, center, right);
}
此方法由PageViewManager(pvm)通过接口调用。
我希望这会给你一个想法!
非常感谢!
EDIT2:
我已经解决了!实际上更像是我找到了解决方法,但我工作得很漂亮!
我所做的就是创建一个Timer类,让我知道某个时间过去了。当我需要加载图像时,我启动它(它是另一个线程)并设置一个布尔值,使我的页面忽略触摸事件(通过在onTouchEvent中返回false)。当它完成时,它调用我的pvm中的一个函数,它只是将该布尔值再次设置为true,效果就是我想要的。定时器只等待大约500毫秒。
感谢您的帮助!
答案 0 :(得分:0)
我希望您使用aSyncTask加载数据!您只需在加载数据时添加进度对话框即可。这可以通过添加:
来完成pDialog = ProgressDialog.show(this, "Loading Data", "Please Wait...", true);
在您开始加载数据之前,一旦您的所有数据准备就绪,只需致电pDialog.dismiss();
答案 1 :(得分:0)
我能想到的一个(冗长的)解决方案是实现自己的ImageView类,它加载一个BitmapDrawable并在onDraw()中绘制它。这样,您可以确定onDraw()何时完成,并调用不同的回调(例如onDrawComplete())来切换触摸事件处理。