定期更改imageview背景和流畅的android

时间:2016-09-26 10:02:45

标签: android android-animation android-imageview android-image android-handler

我有一张ImageView和16张图片。我想根据这些图像更改背景图像。我使用Handler但结果并没有顺利改变。如何让变化更加顺畅?你认为AnimationDrawable更好吗?这是我的代码

private static int[] drawable_img_Array = { R.drawable.img01, R.drawable.img02,R.drawable.img03,R.drawable.img04,
        R.drawable.img05, R.drawable.img06,R.drawable.img07,R.drawable.img08,
        R.drawable.img09, R.drawable.img10,R.drawable.img11,R.drawable.img12,
        R.drawable.img13, R.drawable.img14,R.drawable.img15};

final Handler handler = new Handler();
    handler.postDelayed(new Runnable(){
        public void run(){
            if(i<drawable_img_Array.length) {
                imgView.setImageResource(drawable_img_Array[i]);
                i++;
            } else {
                i=0;
            }
            handler.postDelayed(this, 100);
        }
    }, 100);

这是我使用AnimationDrawable

的第二种方式
    animation = new AnimationDrawable();

    for (int j=0;j<drawable_ring_Array.length;j++)
    {
        animation.addFrame(getResources().getDrawable(drawable_img_Array[j]), 100);

    }
    animation.setOneShot(false);
    ImageView imgView = (imgView) findViewById(R.id.img);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(400, 400);
    params.alignWithParent = true;
    params.addRule(RelativeLayout.CENTER_IN_PARENT);

    imgView.setLayoutParams(params);
    imgView.setImageDrawable(animation);
    imgView.post(new Starter());        

2 个答案:

答案 0 :(得分:2)

您的代码中存在一些逻辑错误。具体如下:

首先,您的其他部分将无法按预期工作。 它应该是这样的:

} else {
   i=0;
   imgView.setImageResource(drawable_img_Array[i]);
   i++;
}

最后,这可能是在UI线程上运行代码的真正问题,如

private static int[] drawable_img_Array = {R.drawable.img01,
            R.drawable.img02, R.drawable.img03, R.drawable.img04,
            R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08,
            R.drawable.img09, R.drawable.img10, R.drawable.img11, R.drawable.img12,
            R.drawable.img13, R.drawable.img14, R.drawable.img15};

    final Handler handler = new Handler();
    handler.new Runnable() {
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (i < drawable_img_Array.length) {
                        imgView.setImageResource(drawable_img_Array[i]);
                        i++;
                    } else {
                        i=0;
                        imgView.setImageResource(drawable_img_Array[i]);
                        i++;
                    }
                    handler.postDelayed(this, 100);
                }
            });
        }
    }
            , 100);

希望它能够发挥作用,如果不是发布日志/错误,我们可以提供帮助。

答案 1 :(得分:0)

使用ImageSwitcher

<ImageSwitcher
    android:id="@+id/image_switcher"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:inAnimation="@anim/fade_in_image"
    android:outAnimation="@anim/fade_out_image">
</ImageSwitcher>

您可以创建所需的动画并将其用于输入/输出。

现在,当调用imageSwitcher.setImageResource(myNextImage)时,它将为转换设置动画。