定期显示多个图像的最佳方式

时间:2015-04-07 15:04:30

标签: android image animation drawable

我需要在不停止主线程的情况下在后台更改图像以提供用户点击等等。所以我需要在背景图像视图中每n秒更换一次图像 另外,我需要用动画来改变图像,例如简单的淡入/淡出 我尝试了不同的方法,但没有得到理想的结果 要说之前,我的图像大小不超过50k 我试图使用动画Drawable,它工作得很好,但问题是当新活动开始时我需要开始动画,但程序流冻结动画可绘制或崩溃与内存不足错误。

<ImageView
    android:id="@+id/background_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:background="@drawable/animation_background"
    >

然而,它在内存不足的情况下在模拟器上崩溃,但它似乎在真实设备上工作,但我必须等待一段时间才开始活动。 我尝试从代码中执行此操作,但结果与此相同。

  this.mBackgroundImage.setAdjustViewBounds(true);
        this.mBackgroundImage.setScaleType(ImageView.ScaleType.CENTER_CROP);
        this.mBackgroundImage.setImageDrawable(getResources().getDrawable(R.drawable.animation_background));
        AnimationDrawable frameAnimation = (AnimationDrawable)this.mBackgroundImage.getBackground();
        frameAnimation.start();ork on real device.    
I tried to do this from the code, but the same result with it.

  this.mBackgroundImage.setAdjustViewBounds(true);
        this.mBackgroundImage.setScaleType(ImageView.ScaleType.CENTER_CROP);
        this.mBackgroundImage.setImageDrawable(getResources().getDrawable(R.drawable.animation_background));
        AnimationDrawable frameAnimation = (AnimationDrawable)this.mBackgroundImage.getBackground();
        frameAnimation.start();

请举例说明如何实施此任务。

大概我需要20张图片我会非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

在那里,我最近正在寻找这个问题并且遇到了一个很好的解决方案,因为它没有应用基于图像的自动密度缩放并按原样使用它们。

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);
            }
    }
};

一切都完成了,希望我帮助过你。