CAN + Animation + Android 2.3.7
Добавлено: 28 авг 2013, 10:21
Здравствуйте, уважаемые форумчане!
Задача:
Получать много сообщений по CAN или ADC (АЦП) и в зависимости от данных двигать стрелки "одновременно".
Проблема:
Listener CAN получает сообщение и вызывает Handler обновления анимации
Handler в CAN сообщении ищет ID, и в зависимости от ID формирует данные и задает угол вращения
if (ID == 0) funcAnimation(0, curAngle, endAngle);
if (ID == 1) funcAnimation(1, curAngle, endAngle); и тд.
funcAnimation(x) - вращает стрелку (x) на заданный угол (endAngle), от текущего ее положения (curAngle)
а) Когда по CAN приходит 1 сообщение (причем любое сообщение) все работает как надо - стрелка двигается, останавливается и продолжает двигаться в другое место, когда приходит другое сообщение.
б) Когда приходит 1, а потом 2 сообщение и так далее в таком порядке, то все работает почти как надо - 1 стрелка едет туда куда ее послали не прерываясь на новое сообщение, а 2 - одновременно может двигаться также быстро как и приходят новые сообщения, то есть 1 стрелка пока не отработает полученное сообщение не остановится, а 2 стрелка будет реагировать на все получаемые сообщения.
в) Когда приходит 2, а потом 1 сообщение - то все работает не так как надо - то есть сначала двигается стрелка 2, а когда закончит двигается стрелка 1.
Вот я не могу этого понять - почему так? (думаю что Handler CAN не успевает все сообщения перехватывать или не организовал очередь CAN сообщений)
Вопрос:
Как поворачивать много ImageView (в моем случае) одновременно и в зависимости от получаемых данных, получаемых от куда угодно, например, от CAN или ADC или UART?
Задача:
Получать много сообщений по CAN или ADC (АЦП) и в зависимости от данных двигать стрелки "одновременно".
Проблема:
Listener CAN получает сообщение и вызывает Handler обновления анимации
Handler в CAN сообщении ищет ID, и в зависимости от ID формирует данные и задает угол вращения
if (ID == 0) funcAnimation(0, curAngle, endAngle);
if (ID == 1) funcAnimation(1, curAngle, endAngle); и тд.
funcAnimation(x) - вращает стрелку (x) на заданный угол (endAngle), от текущего ее положения (curAngle)
а) Когда по CAN приходит 1 сообщение (причем любое сообщение) все работает как надо - стрелка двигается, останавливается и продолжает двигаться в другое место, когда приходит другое сообщение.
б) Когда приходит 1, а потом 2 сообщение и так далее в таком порядке, то все работает почти как надо - 1 стрелка едет туда куда ее послали не прерываясь на новое сообщение, а 2 - одновременно может двигаться также быстро как и приходят новые сообщения, то есть 1 стрелка пока не отработает полученное сообщение не остановится, а 2 стрелка будет реагировать на все получаемые сообщения.
в) Когда приходит 2, а потом 1 сообщение - то все работает не так как надо - то есть сначала двигается стрелка 2, а когда закончит двигается стрелка 1.
Вопрос:
Как поворачивать много ImageView (в моем случае) одновременно и в зависимости от получаемых данных, получаемых от куда угодно, например, от CAN или ADC или UART?