2016-04-29 66 views
0

我已经创建了一个donutprogressBar,并且我设置了进度条值,并且它第一次正常工作,但是当我第二次设置值比进度条在第一值和第二值,我想的进度被设置conatsntant到第二值当我第二次设置进度值时,DonutProgressBar值会波动

here is my code : 

strMalePercentage = jsonObject.getJSONObject("male").getString("percentage_manglik_present"); 
         txtPercentage.setText("Manglik Male"+strMalePercentage); 
         Progress(strMalePercentage); 

public void onClick(View v) { 
     int id = v.getId(); 
     if (id == R.id.btn_ManglikMatchMale){ 
      linearMale.setVisibility(View.VISIBLE); 
      linearFemale.setVisibility(View.GONE); 

      imgMatchGender.setBackgroundResource(R.drawable.ic_male1); 
      txtPercentage.setText("Manglik Male"); 
      Progress(strMalePercentage); 
      btnMale.setBackgroundColor(getResources().getColor(R.color.textPrimary)); 
      btnMale.setBorderColor(getResources().getColor(R.color.sky_blue)); 
      btnFemale.setBackgroundColor(getResources().getColor(R.color.light_pink)); 
      btnFemale.setTextColor(R.color.textPrimary); 
      btnMale.setTextColor(R.color.gray_light); 
     }else 
     { linearMale.setVisibility(View.GONE); 
      linearFemale.setVisibility(View.VISIBLE); 

      imgMatchGender.setBackgroundResource(R.drawable.ic_female1); 
      txtPercentage.setText("Manglik Female "); 
      Progress(strFemalePercentage); 
      btnFemale.setBackgroundColor(getResources().getColor(R.color.textPrimary)); 
      btnFemale.setBorderColor(getResources().getColor(R.color.light_pink)); 
      btnMale.setBackgroundColor(getResources().getColor(R.color.sky_blue)); 
      btnMale.setTextColor(R.color.textPrimary); 
      btnFemale.setTextColor(R.color.gray_light); 

     } 

    } 


public void Progress(final String Percentage){ 
     Timer timer; 


     donutProgress = (DonutProgress) findViewById(R.id.donut_progress_male); 

     timer = new Timer(); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         double d = Double.parseDouble(Percentage); 
         int i = (int) d; 
         donutProgress.setProgress(0); 
         donutProgress.setProgress(i); 


        } 
       }); 
      } 
     },1000,100); 
    } 
+0

嗨,你可能没有塞子d第一次运行后的计时器,以便它保持重置 – iestync

+0

@iestync如何停止计时器? – bipin

+0

如果你在Progress方法外保留了一个定时器的引用,那么你可以直接调用'timer.cancel();'再次启动日程表之前 – iestync

回答

1

也许这样的事情,所以计时器参考在外面,你可以取消它,如果已经运行

private Timer timer; 

public void progress(final String Percentage){ 

    donutProgress = (DonutProgress) findViewById(R.id.donut_progress_male); 

    if (timer == null) { 
     timer = new Timer(); 
    } else { 
     timer.cancel(); 
    } 
    timer.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        double d = Double.parseDouble(Percentage); 
        int i = (int) d; 
        donutProgress.setProgress(0); 
        donutProgress.setProgress(i); 


       } 
      }); 
     } 
    },1000,100); 
}