かなり大きいディスク(それぞれ約1Mb)で画像をスクロールする問題があります。今の問題は各画像間の待ち時間ではなく、画像は、画像がロードされている間に検出され続ける画像のスクロール(変更を通知するために使用します)が、最後にロードされたときに移動した画像になります。私の質問は簡単です。画像がロードされるまで待機する方法があります(イメージが完全にロードされるまで画面コマンドをブロックすることができます)。画像がImageViewにロードされるまでAndroidが待機する
ありがとうございました!
PD:ところでImageViewでページを読み込んでいます。
EDIT:
投稿AsyincCode:
これは私のテスト活動であるが、
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();
}
}
をitests.java今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);
}
このメソッドはintefaceを経由PageViewManager(PVM)によって呼び出されます。
私はこれがあなたにアイデアを与えることを願っています!
ありがとうございました!
EDIT2:
私はそれを解決しました!実際には私はそれの周りの道を見つけたように私は美しく動作します!
私がしたことは、一定の時間が経過したときに私に知らせるTimerクラスを作成することでした。画像をロードする必要があるとき(別のスレッドです)、ブール値を設定して、ページがタッチイベントを無視するようにします(onTouchEventでfalseを返す)。それが完了すると、私のpvmの関数を呼び出して、ブール値をtrueに戻します。その効果は、私が望むものだけです。タイマーは約500ミリ秒しか待機しません。
ありがとうございました!
ImageViewsをスクロールするために使用するコンテナを指定できますか? – sparkymat
実際には、ImageViewから派生したカスタムコンテナに3つの画像を水平のLinearLayoutにロードします。ユーザーが右または左にスクロールすると、3つのイメージをロードする必要があります。それはうまく動作し、待ち時間は非常に許容されます。すべての読み込みが完了するまでタッチイベントを無視するだけです。 – aarelovich