我想在我的列表视图上为 onFling 事件设置动画。
动画效果很好,但在错误的行。
例如:
- ListView 只有一项,动画按预期工作。
- ListView 有两个项目:手势是在第一个项目上进行的,第二个项目是动画的,反之亦然。
- ListView 包含三个项目:在第一个项目上做出手势,最后一个是动画的,在第二个项目上,第二个项目是动画的(如预期的那样),在最后一个项目上,第一个项目是动画的。
代码:
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int position = listView.pointToPosition(Math.round(e1.getX()),
Math.round(e1.getY()));
View row = listView.getChildAt(position);
TranslateAnimation anim = null;
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH || row == null)
return true;
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF,1,Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0);
this.handleSwipe.onHandleSwipeLeft(position);
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF,-1,Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0);
this.handleSwipe.onHandleSwipeRight(position);
}else{
return true;
}
anim.setDuration(500);
row.startAnimation(anim);
return true;
}
OBS:
已经调试好了,位置和行总是对的。
我正在使用 api 级别 7。
该代码在 android 4.2 上运行良好