Skip to main content
KNara.2
Associate III
March 21, 2023
Question

Is there a way to create animation with images to be displayed in different update intervals?

  • March 21, 2023
  • 3 replies
  • 1907 views

I'm in need of creating animation widget, with each image to be displayed for different time frames.

Example I have a set of 3 images to be displayed as animation.

I want to display image1 for 2000 ms

image2 for 800 ms

and image3 for 4000ms?

I tried doing it using custom container.

I tried doing code changes in view.cpp but the results are not satisfactory.

Has anyone tried animation of images manually?

This topic has been closed for replies.

3 replies

Osman SOYKURT
ST Technical Moderator
March 22, 2023

Hello KNara.2,

I think this could be doable using the handleTickEvent() and the setUpdateTicksInterval() function. First, you create your animated image with your 3 different images. In TouchGFX Designer, you'll set the default interval to 2000. Then, in code, in the handleTickEvent function you call the setUpdateTicksInterval 2 times : at 2000 ticks and 2800. Something like this :

void Screen1View::handleTickEvent()
{
 tickCount++ ;
 if (tickCount % 2000 == 0)
 animatedImage1.setUpdateTicksInterval(800);
 if (tickCount % 2800 == 0)
 animatedImage1.setUpdateTicksInterval(4000);
}

Hope it helps.

/Osman

ST Software Developer | TouchGFX
KNara.2
KNara.2Author
Associate III
March 23, 2023

Thank you Osman,

If I'm not wrong my code should look like

if (tickCount % 120 == 0)

   AnimatedReady.setUpdateTicksInterval(48);

 if (tickCount % 170 == 0)

   AnimatedReady.setUpdateTicksInterval(240);

This is because I saw that ticks for every frame is typically 16.67ms.

This was mentioned as a comment above the function declaration

 void unregisterTimerWidget(const Drawable* w);

Also in Screen1ViewBase I could see the call

setUpdateTicksInterval(120); which is setUpdateTicksInterval(updateinterval in ms specified in Touchgfx designer divided by 16.67)

So ideally I should be using (update interval in ms divide by 16.67) always.

Right?

Osman SOYKURT
ST Technical Moderator
March 24, 2023

Hello KNara.2,

Absolutely, you're right :)

/Osman

ST Software Developer | TouchGFX