0


私は基本的に、一方の側に単語/ヒントを表示し、反対側に関連する画像を表示するフリップカードであるアプリを作成しています.2つのビューにviewflipperを使用しています.問題は、画像がインターネットから読み込まれることです.AppはデータベースにアクセスしますURLを抽出してから画像をロードします。つまり、ビューの変更には、画像をダウンロードするのと同じくらいの時間がかかります。ユーザーがアプリが遅いと思わないように、すぐにカードをめくって画像をロードしたい.むしろ、彼らはそれを知っておくべきです.画像がロードされているため、遅延が発生しています。コードの改善をお勧めします。フリップカードに画像をロードするための私のコードは次のとおりです。

    public void setBMP(String s)  //String passed is url extracted from column of db uing  
    {                             //internal db
   try{
    //String url1 = "c.getString(3)";
    String url1= s;
    System.out.println(url1);
    URL ulrn = new URL(url1);
    HttpURLConnection con = (HttpURLConnection)ulrn.openConnection();
    InputStream is = con.getInputStream();
    Bitmap bmp = BitmapFactory.decodeStream(is);
    if (null != bmp)
    {  
    im.setImageBitmap(bmp);
    }
    else
        System.out.println("The Bitmap is NULL");

    }catch(Exception e){}
    }
        }

ビューを変更するために、actionListener を設定しました。ユーザーが画面カードのフリップと画像の読み込みに触れるとすぐに。
また、ユーザーが他のカードを表示している間にバックグラウンドで画像をプリロードすることは可能ですか? または、表示されたカードをキャッシュすることは可能ですか?

4

2 に答える 2

1

Runnablebmpを取得してハッシュマップファイルに保存し、必要に応じてファイルを開き、そうでない場合はWebからダウンロードするを作成すると、私には思えます。

参考のためにfedorvlasovのLazyアダプターを見てみてください。

あなたは彼のイメージローダーを使うことができます

于 2012-04-29T08:55:33.300 に答える
1

asnyctaskルートを使用します。これにより、スピナーのロード/無効化(またはアニメーションのロード)も可能になります。本当に簡単な例については、この回答を確認してください。スピナーを追加する場合は、asnyctaskのonPreExecute()で開始し(例に追加するだけ)、イメージのダウンロード後にonPostExecuteで無効にする必要があります。

AsyncTaskを使用してListViewに画像をロードする

于 2012-04-29T08:59:18.303 に答える