1

水平にドラッグ可能なビューが 3 つあります。たとえば、最初に 2 番目にドロップすると、2 番目と 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);
        }

OK、ドロップ後、2 番目と 3 番目のビューが右に移動します。 ドロップ後

その後、1 番目と 2 番目と 3 番目のビューの間の空きスペースを長押しすると、何が表示されますか? 2 番目のビューのドラッグが開始されました! しかし、実際には、触れることができるよりも、より正しく表示されています。2 番目または 3 番目のビューの「視覚的」表現は、アニメーション後に触れることはできません。 バグ

なんで?

4

1 に答える 1

1

これが1年以上前のものであることは承知していますが、他の誰かがページを見つけた場合に備えて回答します.

これが、アニメーションの翻訳 (アニメーションの表示) のしくみです。オブジェクトを視覚的に移動しますが、実際の X/Y プロパティは更新しません。たとえば、ビューがボタンである場合、元の領域をタッチすると、ボタンがある場所をクリックしたことが視覚的に表示されますが、実際のボタンは移動しないため、ボタンが表示されている場所をクリックしても何も起こりません。

于 2014-04-15T16:50:50.000 に答える