我刚刚开始学习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();
}
});
}
我重复倒数计时器,但第二张图片未显示,第三张图片显示。这是我的问题:是否有任何方法可以修复上面的行或者我必须做其他事情?谢谢你的回复。
答案 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;
声明为成员类。
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]);