У меня есть RelativeLayout, в котором есть ScrollView и EditText, и если пользователь переключает фокус на EditText, я хочу, чтобы ScrollView скрывался, пока они не закончили. Эта часть была простой, но мне также хотелось бы, чтобы RelativeLayout постепенно сокращалась/расширялась, чтобы обеспечить хороший переход, а не щелчок по открытию/закрытию.Сложность анимирования RelativeLayout для изменения размера при изменении его содержимого
Вот код, который скрывает Scrollview когда получает EditText фокус:
частный класс myCostBoxFocusListener реализует View.OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus) {
ScrollView sView = (ScrollView) ((RelativeLayout)v.getParent().getParent()).getChildAt(1);
//A bit hacky, I know, but it works.
if (hasFocus) {
sView.setVisibility(View.GONE);
}
else if(!hasFocus) {
sView.setVisibility(View.VISIBLE);
}
}
}
и это прекрасно работает. Тем не менее, код, который я нарисовал, чтобы попытаться оживить открытие/закрытие, не работает. В настоящее время они заставляют элементы ScrollView затухать в течение 2 секунд, а RelativeLayout по-прежнему мгновенно открывает/закрывает.
LayoutTransition transition = new LayoutTransition();
ObjectAnimator a1 = ObjectAnimator.ofFloat(null, View.SCALE_Y, 0, 1);
AnimatorSet animator = new AnimatorSet();
animator.setStartDelay(0);
animator.play(a1);
transition.setAnimator(LayoutTransition.CHANGE_APPEARING, animator);
transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, animator);
transition.setDuration(2000);
RelativeLayout rView = (RelativeLayout) dialogNew.findViewById(R.id.ocrmain_group_select_parent);
rView.setLayoutTransition(transition);
Я попытался с помощью LayoutTransition_APPEARING/Исчезающие вместо CHANGE_, но это не живой, что я хочу. Мне явно не хватает концепции здесь, и я бы очень признателен за некоторые указания относительно того, как я концептуализую это неправильно.
Это имеет несколько более хороший эффект, но размер окна до сих пор меняется почти мгновенно. Как установить длительность для ее расширения/сокращения? – mikeappell
Взгляните на http://developer.android.com/reference/android/view/ViewGroup.html#setLayoutTransition(android.animation.LayoutTransition). Чтобы изменить этот переход по умолчанию, вы можете выполнить 't = getLayoutTransition()', затем 't.setDuration (CHANGE_DISAPPEARING, duration)', затем 'setLayoutTransition (t)'? – mpkuth
Хорошо, вот в чем проблема: анимированные кнопки - это кнопки, которые исчезают/появляются снова. Окно, содержащее их, по-прежнему меняет размер почти мгновенно. Я каким-то образом применяю переход к неправильному объекту? – mikeappell