2016-06-12 10 views
1

내 응용 프로그램에서 업적에 대한 진행률 표시 줄을 만들려고합니다. 이 진행률 막대는 활동이 열리면 진행 상황을 보여줍니다. 나는 진행 상태 막대에서 목록 상태와 setprogress를 업데이트하는 정규 진행 막대에 익숙하지만 어떻게 든이 작업을 완료 할 수 없었습니다. 아래 코드에서 30/100까지 채우고 진행률 막대가 30 인 것처럼 진행 막대를 만들려고했습니다. 이해를 돕기 위해 간단한 정수로 작업하고 있습니다. 진행률 막대가 진행 상황 업데이트없이 방금 회전하고 있으므로 현재 동작이 가까이 있지 않습니다. 진도는 단순한 정수가 아닌 다른 어떤 구성 요소와도 관련이 없습니다."achievemenet 진행률"막대 만들기

편집 : https://dribbble.com/shots/2758323-Ring-Progress

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my_points); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    progressBar = (ProgressBar) findViewById(R.id.progressBar); 
    progressBar.setIndeterminate(false); 
    new TimedProgress(); 
} 

class TimedProgress { 
    Timer timer; 

    public TimedProgress() { 
     timer = new Timer(); 
     timer.schedule(new ProgressTask(), 0, 500); 
    } 

    class ProgressTask extends TimerTask { 
     int progress = 0; 
     public void run() { 
      if (progress <30) { 
       updateProgress(progress); 
       progress++; 
      } else { 
       timer.cancel(); 
      } 
     } 
    } 
} 

public void updateProgress(final int progress) { 
    if (null != progressBar) { 
     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setProgress((int) progress); 
    } 
} 

레이아웃 :

<ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/progressBar" 
     android:layout_centerVertical="true" 
     android:layout_alignParentEnd="true"/> 

답변

1

enter image description here

사용 타이머가 진행 단계를 계산하는 방법, 예를 들어, 이것은 내가 원하는 동작입니다 매 1/2 초 (500ms). 다음은 Android 용 AsyncTask로 재미있는 변환을 할 수있는 기본 자바 타이머입니다! AsyncTask를 실행하고 타이머가 진행 막대를 업데이트 할 때마다 1/2 초마다 실행합니다.

class TimedProgress { 
    Timer timer; 

    public TimedProgress() { 
     timer = new Timer(); 
     timer.schedule(new ProgressTask(), 0, 500); 
    } 

    class ProgressTask extends TimerTask { 
     int progress = 0; 
     public void run() { 
      if (progress <30) { 
       updateProgress(progress); 
       progress++; 
      } else { 
       timer.cancel(); 
      } 
     } 
    } 
} 

public void updateProgress(final int progress) { 
    if (null != progressBar) { 
     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setProgress((int) progress); 
    } 
} 
+0

아, 맞아. 코드를 이해했지만 어디서 어떻게이 타이머 클래스를 호출하는지 이해하지 못합니까? 보이지 않는 부분을 제외하고 AsyncTask를 그대로 유지합니까? –

+0

오, 알았어. 그래서 당신은 내 코드를 삭제하고이 코드로 대체한다고 말하고있다. 또한 TimedProgress 클래스를 AsyncTask 클래스로 변환하고이를 onCreate에서 호출하여 실행해야합니다. 권리? –

+0

새로운 TimedProgress(); – usajnf