Android View исчезает, когда выходит за пределы родителя

У меня есть LinearLayout и ImageView внутри LinearLayout.

Для ImageView существует эффект перевода.

// v = ImageView ObjectAnimator animation2 = ObjectAnimator.ofFloat(v, "translationY", 200); animation2.setDuration(3000); animation2.setTarget(v); animation2.start(); 

Анимация работает, но она исчезает, когда ImageView выходит за пределы LinearLayout.

Здесь вы можете увидеть проблему: http://screenr.com/zoAH

Как я могу исправить это без изменения высоты LinearLayout.

Solutions Collecting From Web of "Android View исчезает, когда выходит за пределы родителя"

Найдите ViewGroup, к которой принадлежит ImageView, и примените ViewGroup.setClipChildren (false) . По умолчанию рисунок дочерних элементов ограничивается границами родительской ViewGroup.

Существуют два атрибута, которые могут вызвать это: clipChildren и clipToPadding. Вам нужно будет установить clipChildren в значение false для каждой родительской ViewGroup, границы которой объект будет анимировать. Вам также необходимо установить clipToPadding для непосредственного родителя (и, возможно, больше, но я еще не видел его для этого случая).

Вы можете установить оба атрибута в XML

 android:clipChildren="false" android:clipToPadding="false" 

Или в коде

 viewGroup.setClipChildren(false); viewGroup.setClipToPadding(false); 

Моя реализация. Возможно, это может помочь кому-то:

 public static void setAllParentsClip(View v, boolean enabled) { while (v.getParent() != null && v.getParent() instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup) v.getParent(); viewGroup.setClipChildren(enabled); viewGroup.setClipToPadding(enabled); v = viewGroup; } } 

Call setAllParentsClip(yourView, false); Чтобы отключить отсечение всех родителей.

В моем случае clipChildren ничего не сделал, но clipToPadding="false" исправил проблему. Идите фигуру.

 try to update camera position as in my case below: ValueAnimator lockAnimator = ValueAnimator.ofFloat(1, 0); // value from 0 to 1 lockAnimator.setDuration(500); lockAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator pAnimation) { float value = (Float) (pAnimation.getAnimatedValue()); if (value < .6 && flipped) { if (preview != null) mCanvasImage.setImageBitmap(preview); else mCanvasImage.setImageBitmap(imageBitmap); flipped = false; } if (value > .3 && value < .7) { lyt_rlt_container.setCameraDistance(lyt_rlt_container.getCameraDistance() - 100); } else { lyt_rlt_container.setCameraDistance(lyt_rlt_container.getCameraDistance() + 100); } lyt_rlt_container.setRotationY(180 * value); } }); lockAnimator.start();