2011-10-11 28 views
10

Tôi định viết một bộ điều khiển phương tiện tùy chỉnh cho ứng dụng của mình. Tôi đã lên kế hoạch sử dụng thanh tìm kiếm để thực hiện cả việc tìm kiếm và thể hiện sự tiến bộ. Đang cố gắng thực hiện điều này.Làm thế nào để sử dụng một Seekbar trong android như một seekBar cũng như một progressBar cùng một lúc?

Có ai có triển khai như vậy hoặc tôi đang đi sai đường không?

Trả lời

23

Cuối cùng tôi đã tìm ra !!

Các giải pháp mà tôi đã đưa ra được một cái gì đó như thế này:

Trước hết thiết lập tiến độ tối đa cho seekbar như trong suốt thời gian của video

videoView.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 

      seekBar.setMax(videoView.getDuration()); 
      seekBar.postDelayed(onEverySecond, 1000); 
     } 
    }); 

Runnable này sẽ tiếp tục cập nhật các progressbar :

private Runnable onEverySecond=new Runnable() { 

    @Override 
    public void run() { 

     if(seekBar != null) { 
      seekBar.setProgress(videoView.getCurrentPosition()); 
     } 

     if(videoView.isPlaying()) { 
      seekBar.postDelayed(onEverySecond, 1000); 
     } 

    } 
}; 

Và sau đó setOnSeekBarChangeListener cho thanh tìm kiếm có thể được sử dụng để đưa người dùng tìm kiếm trên phương tiện. Bằng việc sử dụng FROMUSER boolean chúng ta có thể làm ra cho dù đó là một cuộc gọi trở lại do sự tương tác của người dùng hoặc

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 

      if(fromUser) { 
       // this is when actually seekbar has been seeked to a new position 
       videoView.seekTo(progress); 
      } 
     } 
    }); 
+0

tuyệt vời! nhưng khi video đi đến kết thúc và tôi muốn chơi 'videoView.start()' nó một lần nữa seekBar không làm việc, làm thế nào để giải quyết vấn đề này? –

0

Bạn đặt seconday progress.

Không, bạn đang đi đúng hướng. Nó rất tốt để hiển thị các công cụ như tiến trình tải xuống và vị trí hiện tại cho các luồng (phương tiện).

+0

Cảm ơn bạn đã trả lời. Nhưng tôi đang sử dụng tiến trình phụ để hiển thị số tiền được truyền. Tôi đăng bài dưới đây những gì tôi đã đưa ra. –