我有3个水平可拖动视图。例如,如果我先按下第二个 - 第二个和第三个必须向右移动。 初始职位:
代码:
case DragEvent.ACTION_DROP:
targetIndex = ((ViewInfo) targetView.getTag()).index;
int lastIndex = getChildCount() - 1;
droppedView = (View) event.getLocalState();
droppedIndex = ((ViewInfo) droppedView.getTag()).index;
if (droppedView == this) {
return false;
}
for (int i = targetIndex; i <= lastIndex; i++) {
if (getChildAt(i) != droppedView) {
moveChildToRight(i);
}
}
private void moveChildToRight(int index) {
....
TranslateAnimation anim = new TranslateAnimation(0, 200, 0, 0);
anim.setDuration(1000);
anim.setFillAfter(true);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
Log.d(TAG, "Animation ended");
requestLayout();
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
});
child.startAnimation(anim);
}
好的,放下后第二和第三个视图向右移动:
之后,我长按到第一和第二+第三视图之间的空白区域,我看到了什么?第二个视图的拖动已启动!但它实际上显示出比它可以触及的更直接。动画后,第二或第三个视图的“视觉”表示是不可触摸的:
为什么?
答案 0 :(得分:1)
我意识到这已经超过一年了,但我会回答以防其他人找到该页面。
这就是翻译动画(视图动画)的工作原理。它可视地移动对象,但不更新实际的X / Y属性。例如,如果您的视图是按钮,则触摸原始区域将显示按钮在视觉上的位置,但单击您看到按钮的位置将不执行任何操作,因为实际按钮从未移动过。