java - 使用 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);
}
});
}
}
}
});
解决方案
'只有 ArrayList[0] 工作然后停止' 那是因为你用值 0 硬编码了这一行:
if (hareketler.get(0)==...)
这将始终只获得数组的第一项。
您正在增加您的 for 循环,但不是您从数组中获得的位置。
if (hareketler.get(i)==...)
这将使用 for 循环的 i 值来增加数组的位置。
然后当然:
hareketler.remove(i)
推荐阅读
- c# - 通过 SSL 调用 Web Api 时出现 403 禁止错误
- java - 我正在尝试从 Jenkins Pipeline 生成 Allure 报告,但遇到错误
- php - 如何使用php创建换行符
- php - 在 Laravel 中提交表单后如何重定向到主页
- reactjs - 如何使用 Formik 和 Material-UI 获得价值可重用的自动完成组件
- postgresql - Postgresl:循环值列表以使用多个 WHERE 子句创建 SELECT
- amazon-web-services - 从 S3 加载时,Redshift 使用了错误的时区
- c# - ServiceStack 5.13.0 元数据和 swagger-ui 页面在 .NET 6 迁移后返回 500 错误
- javascript - [Vue 警告]:属性或方法“最大值”未在实例上定义,但在渲染期间引用
- pandas - 获取半年度和财政年度末的最后价值