我正在编写一个简单的应用程序,可以在按钮点击时随机更改应用程序背景。
我有一个arraylist,其中包含应用程序应使用的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文件中有两个按钮,用于 next 和 previous 。两者都应该在单击时更改应用程序背景。
我从这个arraylist中更改了图像背景:
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并没有成功。有没有办法让它顺利改变?
答案 0 :(得分:1)
您需要使用缓存以节省时间,并且不会在每次图像时都充气
像这样:Drawable image_frame_green = getResources().getDrawable(
R.drawable.frame_green);
答案 1 :(得分:0)
您是否尝试在缓存中预加载所有drawable,然后直接将背景drawable设置为背景,而不是设置背景资源。