当我点击一个按钮时,我尝试做一个幻灯片放映,ImageView将一次一个接一个地显示所有图片/可从Integer pics []中绘制,我将从radiobuttons中选择一个设定的间隔速度(屏幕上有3个选项。
我尝试在没有AsyncTask的情况下一次显示一个一个图像,但是它只显示最后一个图像,并且每个图片之间没有时间延迟。
for (Integer p:pics)
{
iv.SetImageResource(p);
SystemClock.sleep(500);
}
以下代码是我到目前为止,我需要帮助在AsyncTask的底部,如何在设定的间隔时间逐个实现图像
public class PhotoAlbum extends Activity
{
static final int intSlow = 3000;
static final int intMed = 1000;
static final int intFast = 500;
ImageView iv;
int interval;
Integer pics[] = {
R.drawable.img1,
R.drawable.img2,
R.drawable.img3,
R.drawable.img4,
R.drawable.img5,
R.drawable.img6
};
RadioButton rbSlow;
RadioButton rbMedium;
RadioButton rbFast;
Button mAutoButton;
private int currentImage = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_album);
iv = (ImageView) findViewById(R.id.imageView);
iv.setImageResource(pics[currentImage]);
rbSlow = (RadioButton) findViewById(R.id.radioSlow);
rbMedium = (RadioButton) findViewById(R.id.radioMedium);
rbFast = (RadioButton) findViewById(R.id.radioFast);
mAutoButton = (Button) findViewById(R.id.buttonAuto);
mAutoButton.setOnClickListener(AutoButtonChangeImageListener);
}
private View.OnClickListener AutoButtonChangeImageListener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
AutoPicsTask.execute();
}
};
private class AutoPicsTask extends AsyncTask<Integer, Void, Integer>
{
if (rbSlow.isChecked())
{
interval = intSlow;
} else if (rbMedium.isChecked())
{
interval = intMed;
} else
{
interval = intFast;
}
@Override
protected Integer doInBackground(Integer... params)
{
for (Integer p : pics)
{
SystemClock.sleep(interval);
}
return null;
}
protected void onPostExecute(Integer ...value) {
iv.setImageResource(value[0]);
}
}
}
抱歉,我是AsyncTask的新手。
这是一项使用我们迄今为止学到的内容的作业。 我们还没有学习如何使用“handler”,timer,runOnUiThread(),创建一个线程,void run(),postDelayed(),animate,我看到一些建议用于一次实现一个图像的帖子。
提前感谢。
答案 0 :(得分:0)
您正在onPostExecute中设置图片资源。您必须在SystemClock.sleep(interval)之后或之前执行此操作。在doInBackground()中,您无法更改UI元素,但当然有解决方案。
使用runInUiThread()方法。它需要一个可运行的对象。在其中设置imageView。
for (Integer p : pics){
SystemClock.sleep(interval);
runOnUiThread(new Runnable(){
@Override
public void run() {
iv.setImageResource(p);
}
} );
}
答案 1 :(得分:0)
我使用此代码作为计时器
CountDownTimer timer = new CountDownTimer(6000, 1000) { //this will make 5 minute delay
@Override
public void onTick(long millisUntilFinished) {
// write the code of changing pictures
}
@Override
public void onFinish() {
try{
//write the code when finishing
}catch(Exception e){
}
}
}.start();