首页 > 解决方案 > 使用 ArrayList 为视图设置动画

问题描述

我有一个 ImageView、一个 ArrayList 和一个按钮。我的 ArrayList 有多个数字。例如 1,2,2,4,3。当我按下按钮时,我想用 ArrayList 中的数字为 ImageView 设置动画。根据示例 ArrayList。ArrayList[0]=1 ImageView 将向上动画, ArrayList[1]=2 ImageView 将动画向下。动画将继续其中的所有 ArrayList。为此,我必须使用“for循环”。但是动画没有继续,动画循环不起作用。只有 ArrayList[0] 正在工作然后停止。`当我第二次按下按钮时,ArrayList[2] 正在停止工作。我必须一直按下按钮才能工作所有 ArrayList。我想按一次按钮,我想处理所有 ArrayList。

//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);
                       }
                   });
                }
            }

        }
    });

标签: javaandroidarraylistimageviewjquery-animate

解决方案


'只有 ArrayList[0] 工作然后停止' 那是因为你用值 0 硬编码了这一行:

if (hareketler.get(0)==...)

这将始终只获得数组的第一项。

您正在增加您的 for 循环,但不是您从数组中获得的位置。

if (hareketler.get(i)==...)

这将使用 for 循环的 i 值来增加数组的位置。

然后当然:

hareketler.remove(i)

推荐阅读