Android视图在视觉上处于正常位置,但事实上 - 在TranslateAnimation之后的起始位置

时间:2012-08-25 21:05:55

标签: android android-animation android-4.0-ice-cream-sandwich android-4.2-jelly-bean

我有3个水平可拖动视图。例如,如果我先按下第二个 - 第二个和第三个必须向右移动。 初始职位: enter image description here

代码:

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

好的,放下后第二和第三个视图向右移动: After drop

之后,我长按到第一和第二+第三视图之间的空白区域,我看到了什么?第二个视图的拖动已启动!但它实际上显示出比它可以触及的更直接。动画后,第二或第三个视图的“视觉”表示是不可触摸的: Bug

为什么?

1 个答案:

答案 0 :(得分:1)

我意识到这已经超过一年了,但我会回答以防其他人找到该页面。

这就是翻译动画(视图动画)的工作原理。它可视地移动对象,但不更新实际的X / Y属性。例如,如果您的视图是按钮,则触摸原始区域将显示按钮在视觉上的位置,但单击您看到按钮的位置将不执行任何操作,因为实际按钮从未移动过。