我将FrameLayout布局为根布局。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/background_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/init_image"
android:scaleType="centerCrop">
</ImageView>
......
......
</FrameLayout>
我需要在无限循环(某些条件)中定期更改一些图像,以便进行幻灯片放映
我试过使用Handler但是当我改变时我得到OutOfMemory错误。
我也试过ImageSwitcher,但似乎没有正常工作
请举例说明如何按照Android的所有设计模式正确实现它,thx。
答案 0 :(得分:0)
Hye那里,我最近正在寻找这个问题并且遇到了一个很好的解决方案,因为它没有应用基于图像的自动密度缩放并按原样使用它们。
1-将所有图像放在res / drawable-nodpi文件夹中,您必须创建此文件夹,因为它不存在。
2 - 让它们在无限循环中自动从一个变为另一个。
int images[] = { R.drawable.background_1,
R.drawable.background_2,
R.drawable.background_3,
R.drawable.background_4,
R.drawable.background_5,
R.drawable.background_6,
R.drawable.background_7 }; // i've these images in **res/drawable-nodpi**
这是onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView_Animated);
handler.postDelayed(changeImage, 5000); // after every 5secs it will change image.
}
现在这里是处理所有图像变化的部分,在onCreate之外做这个。
Runnable changeImage = new Runnable() {
@Override
public void run() {
if (count >6) {
handler.removeCallbacks(changeImage);
} else {
if (count >= 6)
count = 0;
AlphaAnimation animation1 = new AlphaAnimation(0.5f, 1.0f); //here is a bit of animation for ya ;)
animation1.setDuration(5000);
animation1.setStartOffset(1300); //time for that color effect
animation1.setFillAfter(true);
imageView.startAnimation(animation1);
imageView.setBackgroundResource(images[count++]);
handler.postDelayed(changeImage, 5000);
}
}
};
一切都完成了,希望我帮助过你。