我有一个图像视图,一个数组列表和一个按钮。我的数组列表有多个数字。例如1、2、2、4、3。当我按下按钮时,我想用arraylist中的数字来设置imageview的动画。根据样本列表。arraylist[0]=1 imageview将向上设置动画,arraylist[1]=2 imageview将向下设置动画。动画将继续,所有的arraylist都在里面。为此,我必须使用“for循环”。但动画不继续,动画循环不工作。只有arraylist[0]正在工作,然后停止。`当我第二次按下按钮时,arraylist[2]正在工作,然后停止。我得一直按按钮才能工作。我只想按一次按钮,然后我就想把所有的数组都列出来。
//imageViewPlay=button hareketler=ArrayList imageViewMario=ImageView
imageViewPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i=0;i<hareketler.size();i++){
if (hareketler.get(0)==1){
imageViewMario.animate().y(imageViewMario.getY() -imageViewEngel.getHeight()-7).setDuration(2000).withEndAction(new Runnable() {
@Override
public void run() {
hareketler.remove(0);
}
});
}
if (hareketler.get(0)==2){
imageViewMario.animate().y(imageViewMario.getY() +imageViewEngel.getHeight()+7).setDuration(2000).withEndAction(new Runnable() {
@Override
public void run() {
hareketler.remove(0);
}
});
}
if (hareketler.get(0)==3){
imageViewMario.animate().x(imageViewMario.getX() +imageViewEngel.getHeight()+7).setDuration(2000).withEndAction(new Runnable() {
@Override
public void run() {
hareketler.remove(0);
}
});
}
if (hareketler.get(0)==4){
imageViewMario.animate().x(imageViewMario.getX() -imageViewEngel.getHeight()-7).setDuration(2000).withEndAction(new Runnable() {
@Override
public void run() {
hareketler.remove(0);
}
});
}
}
}
});
2条答案
按热度按时间dgiusagp1#
这是因为
withEndAction
不是同步调用for
没有等待第一个动画结束。您需要的是递归函数,它将在动画结束时再次调用。这样地:还创建一个runnable,它将在动画结束时再次调用该方法
在您的click listener中:
希望这能奏效。
irlmq6kh2#
'只有arraylist[0]正在工作,然后停止',这是因为您用值0对此行进行了硬编码:
这将始终只获取数组的第一项。
您正在增加for循环,但不是从数组中获得的位置。
它将使用for循环的i值来增加数组的位置。
当然还有: