Java Android在ImageView数组中循环并调用以ImageView为参数的函数
我想循环一个ImageView数组,为每个ImageView调用一个函数,并使用ImageView作为函数的参数,同时为循环设置一个暂停,这样循环将暂停3秒,然后再使用下一个ImageView调用函数。到目前为止,这是我得到的最接近的结果,但它仍然显示出错误,因为我无法从Runnable中访问数组 MainActivity.javaJava Android在ImageView数组中循环并调用以ImageView为参数的函数,java,android,arrays,for-loop,Java,Android,Arrays,For Loop,我想循环一个ImageView数组,为每个ImageView调用一个函数,并使用ImageView作为函数的参数,同时为循环设置一个暂停,这样循环将暂停3秒,然后再使用下一个ImageView调用函数。到目前为止,这是我得到的最接近的结果,但它仍然显示出错误,因为我无法从Runnable中访问数组 MainActivity.java public class MainActivity extends Activity implements View.OnClickListener {
public class MainActivity extends Activity implements View.OnClickListener {
ImageView imageView1, imageView2, imageView3,........ imageView16;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView2 = (ImageView) findViewById(R.id.imageView2);
.
.
.
Handler handler = new Handler();
// Array of ImageView(s)
final ImageView[] pieces = {imageView1, imageView2, .....};
// Looping through ImageView array
for(int i = 0; i < pieces.length; i++) {
Runnable shuffle = new Runnable() {
public void run() {
playLevel(pieces[i]);
}
};
// delay the calling of function so that the loop pause every 3s
handler.postDelayed(shuffle, 3000);
}
}
public void playLevel(ImageView imageView) {
// some function
}
}
public类MainActivity扩展活动实现View.OnClickListener{
ImageView imageView1、imageView2、imageView3、……imageView16;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView1=(ImageView)findViewById(R.id.imageView1);
imageView2=(ImageView)findViewById(R.id.imageView2);
.
.
.
Handler=newhandler();
//ImageView的数组
最终ImageView[]片段={imageView1,imageView2,…};
//在ImageView数组中循环
对于(int i=0;i
我们非常欢迎所有的建议和更好的实现方法。谢谢。您应该能够访问
可运行
中的片段
变量(因为它是最终
),您将无法访问的是i
变量。您可以这样做:final int index=i
并在run()
方法中使用index
而不是i
。此外,您可能希望增加每个图像的延迟,否则几乎同时执行所有操作
for(int i = 0; i < pieces.length; i++) {
final int index = i;
Runnable shuffle = new Runnable() {
public void run() {
playLevel(pieces[index]);
}
};
handler.postDelayed(shuffle, (i+1)*3000);
}
for(int i=0;i
谢谢!太好了,现在可以用了。终于,我已经花了好几个小时修改代码了。我现在不能接受你的答案,它说比我能接受你的答案多了3分钟。