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.

Найдите 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" исправил проблему. Идите фигуру.

Получите высоту представления, затем добавьте процент от высоты туда, где она будет скользить

 public void SlideUp(View view){ float height = view.getHeight(); TranslateAnimation animate = new TranslateAnimation(0,0,0,0); animate.setDuration(500); animate.setFillAfter(true); view.animate().translationY((float)(0-0.62*height)).start(); view.startAnimation(animate); } 
 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(); 
  • Как загрузить и сохранить изображение с помощью Google App Engine (java)
  • Проложить маршруты с помощью API Карт Google v2
  • Почему этот код не генерирует исключение ConcurrentModificationException?
  • SQlite Получение ближайших мест (с широтой и долготой)
  • GSON выбрасывает «Ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY»?
  • Вызов внешней функции classа из внутреннего classа
  • Android - динамически получать текущую активность на переднем плане
  • Как я могу сделать ячейку в ListView в Android расширяться и сокращаться вертикально, когда ее касаются?
  • цвет андроида между двумя цветами, в зависимости от процента?
  • Почему double width = 50/110000; выход составляет 0,000000000000000?
  • Java: как получить входные данные из System.console ()
  • Interesting Posts
    Давайте будем гением компьютера.