Android Вид Исчезает, Когда Выйти За Пределы Родителя
У меня есть 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.
6 ответов:
найти ViewGroup, что ImageView принадлежит и применить ViewGroup.setClipChildren (false). По умолчанию чертеж дочерних элементов ограничен границами родительской группы представлений.
существуют два атрибута, которые могут привести к этому: clipChildren и clipToPadding. Вам нужно будет установить clipChildren в false для каждой родительской группы представлений, границы которой будут анимированы объектом. Вам также нужно установить 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; } }
звоните
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();