我有問題,滾動磁盤上相當大的圖像(每個大約1Mb)現在我遇到的問題不是每個圖像之間的延遲,而是加載將圖像的滾動(用於表示變化的圖像)在圖像加載時保持檢測狀態,最終加載時會導致圖像移動。我的問題很簡單。有沒有辦法等到圖像加載(這樣我可以阻止屏幕命令,直到圖像完全加載)。Android等待,直到一個圖像加載到ImageView
感謝您的任何答案!
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(瀏覽量是我的自定義的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)通過inteface調用。
我希望這能給你一個想法!
非常感謝!編號2:
我解決了它!其實更像是我找到了一個方法,但我的作品非常漂亮!
我所做的只是創建一個Timer類,讓我知道什麼時候已經過去了。當我需要加載圖像時,我啓動它(它是另一個線程),並設置一個布爾值,使我的頁面忽略觸摸事件(通過在onTouchEvent中返回false)。當它完成後,它調用我的PVM中的一個函數,將該布爾值再次設置爲true,並且效果正是我想要的。計時器僅等待約500毫秒。
感謝您的幫助!
你能指定使用滾動ImageViews哪個容器? – sparkymat
我實際加載在衍生弗羅馬一個ImageView的成水平的LinearLayout定製containters 3個圖像。當用戶滾動到右側或左側時,我必須加載3個圖像。它工作正常,延遲非常可接受。我只需要忽略觸摸事件,直到完成所有加載。 – aarelovich