使用LayoutTransition实现DragLinearLayout库在运行时崩溃

时间:2015-10-19 16:32:35

标签: java android animation android-linearlayout

DragLinearLayout库的实现工作正常,直到我也实现了Android的LayoutTransition。

我收到此错误:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

And I get runtime errors on these two methods in the DragLinearLayout class : 
1. addView(draggedItem.view, switchPosition);  //called in on drag
2. onDrag(deltaY); // called in the onTouchEvent override method. 

我通过在我的实现活动中覆盖onTouchEvent()来阻止它崩溃,并且在触摸行时将DragLineLineoutLayout上的setLayoutTransition参数设置为null,然后在调用onAnimaitonEnd时在DragLinearLayout中,我在我的实现活动中调用一个方法并使setLayoutTransition()参数不再为null。

但是这会导致一些延迟,当你停止拖动并拖动它时,你会拖动它,它会消失一秒然后重新出现。

是否有使用此库实现LayoutTransition,或使用动画添加行的任何其他推荐技术,以及动画增加DragLinearLayout的大小?

提前致谢。

1 个答案:

答案 0 :(得分:0)

所以答案是,这是可能的。

要做到这一点,请通过从库中获取代码并复制并粘贴到您自己的类中来创建自己的DragLinearLayout。或者将库添加为外部库。我们将这个新类称为DragLinearLayout2。

在DragLinearLayout2中,将LayoutTransition对象添加为成员变量:

 private LayoutTransition layoutTransition;

然后,在startDrag()方法中,在方法的顶部添加:

layoutTransition = getLayoutTransition();
                if (layoutTransition != null) {
            setLayoutTransition(null);
                    }

然后,在onDragStop()方法中,进入实现的onAnimationEnd()方法并在最后添加:

 if (layoutTransition != null && getLayoutTransition() == null) {
                                        setLayoutTransition(layoutTransition);
                                    }

如果您需要我发送我的课程版本,请给我留言。