animacje gif - jak przeładować, żeby znów się animowało

0

Mam taki mały problem:

klikając na wybrany radiobutton ładuję mi sie gif (animacja w gifie która po kilku sekundach sie kończy). co zrobić żeby po ponownym kliknięciu na radiobutton animacja w gifie znowu sie odtworzyła. animacja w gifie wykonuje sie tylko raz!!!! pewnie trzeba wyczyścić z pamięci obrazek i załadować go ponownie, bo ciągle pamięta mi gifa w ostatnim "klatce" animacji (obrazek statyczny). jak to zrobić [???] proszę o pomoc [!!!]

0

Trochę więcej szczegółów, w jaki sposób umieszczasz gifa ?, animacja ustaje sama z siebie, czy na skutek działalności użytkownika ?
U mnie animowane gify ruszają się bez końca.
pozdrawiam

0

dokladnie jest tak: klikamy na dana zakladke w aplecie -> pokazuje sie na gif ktory sie animuje i staje (gif wykonuje sie tylko raz tak został stworzony - sam z siebie ustaje i tak chce zeby bylo) oraz 2 radiobuttony kon1 i kon2 sa w tej zakladce (domyslnie kon1 zaznaczony). i np klikam 2radiobutton kon2 i laduje mi sie drugi gif ktory sie animuje i staje (wykonuje sie tylko raz tak został stworzony - sam z siebie ustaje i tak chce zeby bylo)) i jesli teraz klikne w pierwszy raddiobutton to pojawia mi sie pierwszy gif ale w ostatniej klatce animacji (statyczny -nie animuje sie). trzeba go jakos przeladowac zeby kolejny raz sie zaaanimowal sie od poczatku. analogicznie jest z drugim gifem tzn jak klikne na kon2 to tez pojawia mi sie statyczny obrazek w ostatniej klatce animacji gifa. Wydaje mi sie ze trzeba wyczyscic obrazek z pamieci i zaladowac go jeszcze raz bo aplet pamieta, tak??

Image lad = getImage(getDocumentBase(),"images/kondenlad.gif");
Image roz = getImage(getDocumentBase(),"images/kondenroz.gif");
                  if(kon1.isSelected())
                  {
                  	g.drawImage(lad,150,0,this); 
                   }
                  		
                   if(kon2.isSelected())
                 {
                  g.drawImage(roz,150,0,this);
                 }
0

Gdzie to

      if(kon1.isSelected())
      {
            g.drawImage(lad,150,0,this);
      }
                      
      if(kon2.isSelected())
      {
            g.drawImage(roz,150,0,this);
      }

jest umieszczone ? To jest fragment metody paint(), czy fragment obsługi zdarzenia ?

0

fragment metody paint

0

Nie znam całego kodu, zatem trochę zgaduję. Wykonanie metody paint() musi zostać jakoś wymuszone - trzeba nasłuchiwać zmiany stanu radiobuttonów i po zmianie wywołać repaint(). Sprawdź co się dzieje gdy oczekujesz na animowaną ikonę a pojawia się nieruchoma. Wymuś odmalowanie przez zasłonięcie apletu innym programem i ponowne odsłonięcie.
pozdrawiam

0

no to jest tak do radiobuttonów podpiety jest actiolistener i w zaleznosci od stanu radiobuttona wywolywane jest repaint() w actionPerformed, ktory odrysowuje cala dana zakladke (oczywsice laduje sie obrazek w zaleznosci czy pierwszy czy 2 radiobutton zaznaczony). jesli przyslonie aplet jakis programem lub np zmniejszyłem okno IE to wtedy po kliknieciu radiobutton pojawil sie gif ktory sie animowal.

w actionPerformed :

if(kon1.isSelected()){
kon.repaint();}
if(kon2.isSelected()){
kon.repaint();}

a w paincie jest funkcja "kon" ktora wyswietla mi te gify w zakladce w zaleznosci od radiobuttona:

Image lad = getImage(getDocumentBase(),"images/kondenlad.gif");
Image roz = getImage(getDocumentBase(),"images/kondenroz.gif");
if(kon1.isSelected())
{
g.drawImage(lad,150,0,this);
}

               if(kon2.isSelected())
             {
              g.drawImage(roz,150,0,this);
             }

zrobilem tez inna wersje przy uzyciu jednej zmiennej Image konden; ktora dekaruje w glownej klasie i:

w actionPerformed jest :

if(kon1.isSelected()){
konden= getImage(getDocumentBase(),"images/kondenlad.gif");
    kon.repaint();} 
    	if(kon2.isSelected()){
konden= getImage(getDocumentBase(),"images/kondenroz.gif");
    kon.repaint();}

a paincie jest tylko:

g.drawImage(konden,150,0,this);

i tez nie dziala! Jesli zmieniam zmiennej konden adresy obrazkow to powinno sie odrysowac jeszcze raz a tu jakos pamieta sobie ze juz byl dany gif animowany wiec nie animuje go tylko pokazuje ostatnia klatkę animacyjną gifa. sa jakies bufory? lub cos co trzeba wyczyscic zeby to zadzialalo?? tez jest takie cos ze jak przelacze w trakcie animowania pierwszego obrazka na drugi obrazek i z powrotem na pierwszy obrazek przelacze to widac ze obrazek animował sie w pamieci i przelecialo pare klatek od tej zmiany radiobuttonow

0

Nie napisałeś co sie dzieje po zasłonieciu i odsłonięciu.
W kodzie jest jakieś tajemnicze kon.repaint(); co to jest kon ?
pozdrawiam

0

kon.repaint() odwoluje sie do funkcji odpowiedzialnej za odrysowanie tego obrazka w paint np.

if (typFunkcji == "Kondensator")
{

              	g.drawImage(kondengif,150,0,this); 
              	
              }

i jesli wywoluje sie kon.repaint() to odrysowuje sie ten obrazek, spełniony jest ten if.

0

a odnosnie przysloniecia: jak sie przysloni to czasem po kliknieciu na radiobuttona zacznie sie obrazek animowac a czasem nie, dziwne. np jak damy minimalizuj i maksymalizuj i klikniemy radiobutton to dziala, animuja sie gif

1 użytkowników online, w tym zalogowanych: 0, gości: 1