2012-02-06 7 views
3

私はViewPagerを使用しているので、インターネットからフェッチする必要がある無限の画像コレクションを閲覧することができます。次のページのコンテンツが用意されるまでViewPagerのページ切り替えを避ける

画像が既に読み込まれていない限り、次の/前のページに変更したくないです。したがって、ユーザーが左右にスワイプした場合、現在の画像は表示されたままで、進行状況バーが上に回転し、次/前のページへの変更は画像が準備ができるまで実行されません。すぐにページがスワップし、プログレスバーが消えてしまいます。

現時点では、ViewPagerとFragmentStatePageAdapterの子ビューに次のレイアウトを使用して実装しようとしていました。私は、下記の手順に従ってくださいフラグメントで

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ImageView 
     android:id="@+id/imageview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:contentDescription="@string/label_painting" 
     android:visibility="gone" /> 

     <ProgressBar 
      android:id="@+id/progressbar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" android:visibility="gone" /> 

</FrameLayout> 

:そのonCreateViewで

  • 私はプログレスバーを表示させます。
  • 同じ方法で、イメージを取得し、バイトストリームをビットマップにデコードするスレッドを開始します。
  • ビットマップが使用可能になると、スレッドはImageViewにビットマップを設定し、ビットマップを表示してプログレスバーを非表示にするメッセージをハンドラに送信します。

私は、次の午前、このアプローチの問題は、場合には、画像が取得されていない、まだ、ユーザーがスワイプすると、前の画像が消えて、新しいイメージが使用可能になるまで、彼はスピニングプログレスバーを見ているということです。画像を見続けるほうがずっといいです。

これは誰でもViewPagerで実装できましたか、自分のコードで何が変更できるか分かっていますか?

ありがとうございます。

答えて

2

私はほとんど同じでした。

あなたは経由アダプタ内/無効ビューのページングを有効にすることができます:あなたは、あなたのイメージがAsyncTask

private class DownloadImageTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
    } 

} 

viewpagerを無効にするonPreExecute()メソッドを使用し、onPostExecute()セットでの使用ロードする場合

//disable viewpager 

public class CustomViewPager extends ViewPager { 
private boolean enabled; 
public CustomViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.enabled = true; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (this.enabled) { 
     return super.onTouchEvent(event); 
    } 
    return false; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    if (this.enabled) { 
     return super.onInterceptTouchEvent(event); 
    } 
    return false; 
} 

public void setPagingEnabled(boolean enabled) { 
    this.enabled = enabled; 
} 
} 

再度画像を有効にしてViewPagerを再度有効にします。 これは私にとって完璧に機能します

関連する問題