在“图像视图”中显示两个以上的图像,并在“活动”中显示延迟

时间:2015-11-07 17:25:44

标签: android android-layout

我刚刚开始学习android。我想在图像视图中显示两个以上的图像,并且它们之间有延迟。当只需要显示两个图像时,我就能做到这一点:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn1 = (Button) findViewById(R.id.button);
    img = (ImageView) findViewById(R.id.img);

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new CountDownTimer(3000, 1000) { 
                public void onTick(long millisUntilFinished) {
                }

                public void onFinish() {
                    img.setImageResource(R.drawable.icon2);
                }
            }.start();
        }
    });
}

我重复倒数计时器,但第二张图片未显示,第三张图片显示。这是我的问题:是否有任何方法可以修复上面的行或者我必须做其他事情?谢谢你的回复。

5 个答案:

答案 0 :(得分:1)

您可以使用TransitionDrawable。 E.g。

Drawable drawables[] = new Drawable[2];
drawables[0] = getResources().getDrawable(R.drawable.icon1);
drawables[1] = getResources().getDrawable(R.drawable.icon2);
TransitionDrawable crossfader = new TransitionDrawable(drawables);
ImageView img = (ImageView)findViewById(R.id.img);
img.setImageDrawable(crossfader);
crossfader.startTransition(3000);

代码将在三秒内交叉淡化icon1和icon2

编辑:

对于n个不同的drawable,您可以使用Handler。 E.g

int drawables [] = { R.drawable.icon1, R.drawable.icon1, ... R.drawable.icon };

int currentIndex = 0;声明为成员类。

之后在onCreate上
img = (ImageView) findViewById(R.id.img);
你做了

img.postDelayed(new Runnable() {
        @Override
        public void run() {
            img.setImageResource(drawables[currentIndex++%drawables.length]);
            img.postDelayed(this, 1000);
        }
    }, 1000);
这样,drawable每秒都会改变而不会交叉渐变。在img.removeCallbacks(null)

中致电onPause

答案 1 :(得分:1)

您忘了更改图片资源参数 您的代码始终引用R.id.icon2而不是另一个图像

img.setImageResource(R.drawable.icon2); //你的问题
您可以将图像保存在Drawble数组

答案 2 :(得分:0)

尝试;

public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn1 = (Button) findViewById(R.id.button);
        img = (ImageView) findViewById(R.id.img);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new CountDownTimer(3000, 1000) {
                    public void onTick(long millisUntilFinished) {
                    }

                    public void onFinish() {
                        img.setImageResource(R.drawable.icon2);
                    }
                }.start();
                Timer timer = new Timer();
                timer.schedule(new TimerTask() {
                    @Override
                    public void run() {

                         Activity.this.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
            if(order%2==0){
                            img.setImageResource(R.drawable.icon1);
                        }else{
                            img.setImageResource(R.drawable.icon2);
                        }
                                }
                            });

                        order++;
                    }
                },0,4000);
            }
        });

    }

    private int order = 0;

答案 3 :(得分:0)

这是正确的方向。使用处理程序。

new Handler().postDelayed(new Runnable() {
//Some code
},3000);

答案 4 :(得分:0)

使用数组

 int[] images = {

        R.drawable.troj1,R.drawable.troj2,R.drawable.troj3,R.drawable.troj4,R.drawable.troj5, //0-4
        R.drawable.koc1,R.drawable.koc5,R.drawable.koc3,R.drawable.koc4,R.drawable.koc2,//5-9
        R.drawable.kruh1,R.drawable.kruh2,R.drawable.kruh3, ///10-12
        R.drawable.tutorial1,
        R.drawable.tutorial2,
        R.drawable.tutorial3,
        R.drawable.nic,
};

调用数组

ImageView potom;

current_image_index =(int)(Math.random()* 12); potom.setImageResource(图像[current_image_index]);