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。单击时两者都应更改应用程序背景。

我从此数组列表更改图像背景:

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 回答