2013-08-29 8 views
5

Robię dla niestandardowego okrągłego koła postępu. tutaj, czego potrzebuję, kiedy koło postępu zakończy się stuprocentowym postępem. Potem, kiedy ponownie kliknij, muszę zmienić kolor postępuje w czasie wykonywania ...Zmiana koloru w niestandardowym kółku postępu w środowisku wykonawczym w programie Android programowo

Pobrałem kod z tego linka .. https://github.com/Todd-Davies/ProgressWheel

uwaga: kliknij na przycisku, postęp zaczyna postępuje. ten pasek paska postępu ma już jeden kolor. Po ukończeniu postępu w 100%, chcę, aby wystartował ponownie, tym razem, muszę zmienić kolor, aby był czerwony runtimely ...

Próbowałem ten link również .. ten link jest o posiadanie domyślnego paska postępu . ale używam do własnego postępu bar.thats dlaczego, nie mogę stosować tę metodę jak ... http://myandroidsolutions.blogspot.in/2012/11/android-change-indeterminate-progress.html http://www.tiemenschut.com/how-to-customize-android-progress-bars/

ktoś może mi pomóc, aby zakończyć to zadanie .. Dzięki Advance ....

mój kod: onCreate Metoda:

increment.setOnClickListener(new OnClickListener() { 
@SuppressLint("WrongCall") 
public void onClick(View v) { 
Log.v("test", "-----increment button clicked--------"); 
if(!running) { 
progress1 = (int) 370 ; 
Thread s = new Thread(r); 
s.start(); 
} 
} 
}); 

final Runnable r = new Runnable() { 
     @SuppressLint("WrongCall") 
     public void run() { 
      //Log.v("test", "----- thread called--------"); 
      running = true; 
      //Log.v("test", "progress:"+progress); 
      //Log.v("test", "progress1:"+progress1); 
      progress2 = progress - progress1 ; 
          //progress = 360 , progress1 = uservalue 
      Log.v("test", "progress:"+progress); 
      Log.v("test", "progress1:"+progress1); 
      Log.v("test", "progress2 = progress - progress1:"+progress2); 
      //percentage = pw_two.incrementProgress(); 
      // pw_two.setBarColor(Color.parseColor("#FF0000")); 

      while(progress2<360) {  
      percentage = pw_two.incrementProgress(); 
      Log.v("test","percentage:"+percentage); 
       progress2++; 
       try { 
        Thread.sleep(15); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 



// here when crossing 360 above , then color change effect needed.. 
//why we using this function, when put ten minutes for break, 
    who taking more than ten minutes,, 
// then that time itself, need to change color.. 
    i finish that time calculation.... 
       if(progress2 > 359) { 
// here.. need to call this method two times.. then only, wheel will be refreshed...... 
        //onPause_Reset_ProgressWheelOne(); 
        onPause_Reset_ProgressWheelOne(); 
        //break; 
       } 
      } 

      running = false; 
     } 
    }; 

    public void onPause_Reset_ProgressWheelOne() { 

    Log.v("test", "onPause_Reset_ProgressWheelOne--------"); 

    progress = 360; 
    pw_two.setRimColor(Color.parseColor("#fe854c")); //1988c4 //fe854c 
    pw_two.setBarColor(Color.RED); 
    //pw_two.resetCount(); 
    pw_two.refreshWheel(); 
    // progress = 0; 
    // pw_two.setProgress(0); 

    } 

ProgressWheel.java CLass : 

    public void refreshWheel() { 

    setupPaints(); 
} 
+0

Witam, czy możesz mi powiedzieć, jak odwołujesz się do tej biblioteki w swoim projekcie? Czy ustawiłeś projekt ProgressBar jako bibliotekę i odwołujesz się do niego w swoim projekcie? –

+0

Witam, nie dodałem jako biblioteki. po prostu skopiować te pliki klas do moich istniejących folderów projektu. i użył go .. samo dla plików xml do układu, gdziekolwiek chcesz .. – harikrishnan

Odpowiedz

7

Wewnątrz ProgressWheel.java (com.todddavies.components.progressbar.ProgressWheel), dodać metodę:

public void refreshTheWheel() { 

    setupPaints(); 

} 

Klikam na przycisk, postęp zaczyna się rozwijać. ten pasek paska postępu ma już jeden kolor. Po postępie ukończenia 100%, chcę go uruchomić ponownie, że czas, muszę zmienić kolor będzie czerwony runtimely

Kiedy trzeba zmienić kolor:

// Progress is 100% 
if (progress == 360) { 

    // Change the color 
    mProgressWheel.setBarColor(Color.RED); 

    // Refresh 
    mProgressWheel.refreshTheWheel(); 

    // Reset progress 
    progress = 0; 
    mProgressWheel.setProgress(0); 

    // You can also use: 
    // mProgressWheel.resetCount(); 
} 

Uwaga: Upewnij się, że edytowanie/dodawanie do tej biblioteki jest dozwolone.

Edit:

Sprawdź, czy następujące zmiany Ci pożądany wynik:

deklarować zmienne globalne:

// `progress` isn't needed 
// int progress = 360; 
int progress1 = 0; 
int progress2 = 0; 

.... 
.... 

increment.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     Log.v("test", "-----increment button clicked--------"); 

     if(!running) { 

      // I am not sure what you are using `progress1` for 
      // progress1 = (int) 370 ; 

      progress1 = 0; 
      progress2 = 0; 

      // reset `pw_two` 
      pw_two.resetCount(); 

      Thread s = new Thread(r); 
      s.start(); 
     } 
    } 
});  

Teraz Runnable:

final Runnable r = new Runnable() { 
    public void run() { 
     running = true; 

     // I could not figure out why you are using this 
     // Can you explain what this does? 
     // progress2 = progress - progress1 ; 

     while(progress2 < 361) { 
      pw_two.incrementProgress(); 

      // Increment both `progress1` and `progress2` 
      progress2++; 
      progress1++;   

      try { 
       Thread.sleep(15); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      // Here, reset `progress2`, but not `progress1` 
      if (progress2 == 360) { 
       pw_two.setRimColor(Color.parseColor("#fe854c")); //1988c4 //fe854c 
       pw_two.setBarColor(Color.RED); 
       pw_two.refreshWheel(); 
       progress2 = 0; 
       pw_two.setProgress(0); 

       // Log value of `progress1` 
       Log.v("Progress 1", "progress1 is " + progress1); 
      } 
     } 
     running = false; 
    } 
}; 

Jesteś skończony ot potrzebujesz wywołać inną metodę. Przy progressValue = 360 kolor zostanie przełączony. Jeśli w jakiś sposób źle zrozumiałem, co próbujesz osiągnąć, czy możesz wyjaśnić niektóre przypadki użycia?

+0

dziękuję za odpowiedź. Działa dobrze, ale muszę wywołać metodę odświeżania przez dwa czas .. to tylko jej działa .. – harikrishnan

+0

ale teraz mam jeden problem, muszę zmienić kolor, gdy ciągle po osiągnięciu 360. Nie chcę klikać again.prev kolor tła jest taki sam. ile procent przekroczył 360, ten stan tylko trzeba zmienić nowy kolor .. – harikrishnan

+0

@harikrishnan Nie ma za co. Czy możesz umieścić kod swojej aktywności w powyższym pytaniu? Próbowałem tego na moim końcu i działało dobrze. W rzeczywistości nawet nie zaimplementowałem funkcji 'onClick()'. Po prostu uruchomiłem 'ProgressWheel' raz i natychmiast po przekroczeniu' 100% ', kolor przełączył się na czerwony. Spojrzenie na twój kod da mi lepsze pojęcie o tym, co się dzieje. – Vikram

1

Sprawdź przykład: this ma okrągły pasek postępu, który zmienia kolor po zwiększeniu postępu.

Powiązane problemy