0

ボタンのクリックでアプリケーションの背景をランダムに変更する単純なアプリを作成しています。

アプリケーションが使用する必要がある画像の 5 つの ID を含む配列リストがあります。

    ArrayList<Integer> imageID = new ArrayList<Integer>();
    imageID.add(R.drawable.frame_blue);
    imageID.add(R.drawable.frame_green);
    imageID.add(R.drawable.frame_lilac);
    imageID.add(R.drawable.frame_pink);
    imageID.add(R.drawable.frame_yellow);

レイアウト xml ファイルには、nextpreviousの 2 つのボタンがあります。どちらも、クリックするとアプリケーションの背景を変更する必要があります。

この配列リストから画像の背景を変更します。

iM.setBackgroundResource(imageID.get(r.nextInt(5)));

私のレイアウトxmlは次のようになります。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/parentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="76dp"
        android:onClick="previous"
        android:text="Previous" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignParentRight="true"
        android:onClick="next"
        android:text="Next" />

</RelativeLayout>

ボタンのクリック、ImageView の背景の変更ですべて正常に動作しますが、問題は背景がスムーズに変更されないことです。

しばらくハングします。メインの UI スレッドが 1 ~ 2 秒間ブロックされ、アプリケーションがハングしたように見える場合があります。

ハングの意味: ボタンが数秒間クリックされたままになることがあります。

asynctask を試してみましたが成功しませんでした。スムーズに変更する方法はありますか?

4

2 に答える 2

1

時間を節約するためにキャッシュを使用する必要があり、次のように画像が毎回膨張することはありません。Drawable image_frame_green = getResources().getDrawable( R.drawable.frame_green);

于 2012-08-18T18:18:37.207 に答える
0

すべてのドローアブルをキャッシュにプリロードしてから、バックグラウンド リソースを設定する代わりに、バックグラウンド ドローアブルをバックグラウンドとして直接設定しようとしましたか。

于 2012-08-18T18:01:00.297 に答える