2014-12-08 2 views
1

Я использую следующий код для анимации расширяемого макета:Android: расширить анимация не работает

class ExpandAnimation extends Animation { 
    private View _view; 
    private int _startHeight; 
    private int _finishHeight; 

    public ExpandAnimation(View view, int startHeight, int finishHeight) { 
     _view = view; 
     _startHeight = startHeight; 
     _finishHeight = finishHeight; 
     setDuration(500); 
     System.out.println(_startHeight); 
     System.out.println(_finishHeight); 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     int newHeight = (int)((_finishHeight - _startHeight) * interpolatedTime + _startHeight); 
     _view.getLayoutParams().height = newHeight; 
     _view.requestLayout(); 
    } 

    @Override 
    public void initialize(int width, int height, int parentWidth, int parentHeight) { 
     super.initialize(width, height, parentWidth, parentHeight); 
    } 

    @Override 
    public boolean willChangeBounds() { 
     return true; 
    } 
}; 

Этой анимация создаются каждый раз, когда я нажимаю на кнопку. Он называется правильно (проверяется System.out.println и он печатает правильные значения), однако в эмуляции эмулятора работает только один раз в 15 раз. Точнее скрыть это отлично работает, но расширение работает только один раз несколько раз (на эмуляторе, не могу заставить его работать на телефоне).

В чем может быть проблема?

Спасибо вперед

EDIT: раскладка Я пытаюсь оживить это FrameLayout. Он имеет TextView в качестве дочернего элемента и finishHeight измеряется высотой измерения textView. Значения верны. Я также попытался вызвать textView.requestLayout() в применении преобразования, чтобы перерисовать макет, но он не работает. Он по-прежнему расширяется только иногда. Если вам нужен еще один код, не стесняйтесь спрашивать.

+0

У меня есть расширенные области с интерактивным доступом, и он работает лучше на телефоне, но он все еще не 100%. Иногда мой телефон узнает, что я нажал на 2 элемента, и он расширяет их оба. Но я думаю, что они сейчас достаточно большие (например, 1,2 см) ... реально не знают, как сделать эту работу лучше – horin

ответ

0

Вызов

((View) toExpand.getParent()).invalidate(); 

только после того, как startAnimation решить мою проблему. Должен проверять его на других устройствах, но я думаю, что это сработает.

Смежные вопросы