2012-05-10 1 views
1

Я довольно новичок в Trident Animation Library, но мне удалось использовать это для моей анимации, и это работает очень хорошо.Java - библиотека анимации Trident - отразите интерполяцию при изменении размера контейнера

Мое требование состоит в основном анимировать JComponent из одного из углов контейнера в середину контейнера.

Ниже мой псевдокод

this.setLayout(null);  
JButton button = new JButton(); 
button.setLocation(new Point (0,0)); 
Point center = new Point(getWidth()/2, getHeight()/2); 
Timeline timeline = new Timeline(notification.getComponent()); 
timeline.addPropertyToInterpolate("location", button .getLocation(), center); 
timeline.setDuration(1000); 
timeline.play(); 

Теперь, когда мой контейнер изменяет центр изменений контейнера. Для e.x: Если начальный центр контейнера был (100 100), а после изменения размера контейнера новый центр (200 200).

Можно ли каким-либо образом отразить новый центр при интерполяции, чтобы компонент перемещался (200, 200) вместо (100, 100)? Пожалуйста помоги.

ответ

0

Это первое, что приходит в голову:

В начале магазина текущий размер окна/панели. На каждой отметке времени «галочка» проверьте, отличается ли текущий размер окна/панели с той, с которой вы начали (т. Е. Панель изменила размер). Если он изменил размер, остановите текущую временную шкалу и создайте новую временную шкалу с новым путем, основанным на новом центре панели.

+0

Спасибо за помощь. Я только однажды задал вопрос в решении, данное вами. Длительность временной шкалы является предопределенным значением. Таким образом, 1000 мс в timeline.setDuration (1000) предопределено. Теперь, если я остановлю текущую временную шкалу и создаю новую временную шкалу каждый раз, когда размер контейнера изменится, как я буду отслеживать прошедшее время, так что каждый раз, когда произойдет изменение размера, я могу передать «totaltime-elapsedtime» на мою новую временную шкалу. Кроме того, если конвертер слишком часто изменяется, рекомендуется прекратить и создать новые временные рамки. Будет ли это слишком сильно влиять на производительность приложения? – user1096084

+0

Как вы сказали, «totaltime-elapsedtime» кажется хорошей идеей. Я бы предложил вам написать [Compoment Listener] (http://docs.oracle.com/javase/tutorial/uiswing/events/componentlistener.html), чтобы обновить временную шкалу, когда пользователь выполнил изменение размера окна/панели (т. Е. игнорируя все небольшие шаги между ними во время изменения размера). Что касается производительности, то есть только один способ узнать: Попробуйте :-) –

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