2010-02-23 19 views
8

Tôi muốn có màu của thanh tiến trình (cụ thể là tiến trình phụ được cập nhật với setSecondaryProgress) để thay đổi động khi chạy khi nó đi qua một điểm nhất định.Làm thế nào bạn có thể cập nhật động màu của một SeekBar?

Tôi đã có thể thay thế bản vẽ của riêng mình vào thanh trong chức năng onCreate của Activity (thay đổi màu từ vàng sang xanh) bằng cách gọi setProgressDrawable và thay thế tài nguyên tôi đã sao chép từ phiên bản Android mặc định của tiến trình ngang (SDK/nền tảng/android-2.1/data/res/drawable/progress_horizontal.xml). Tuy nhiên, cập nhật điều này tại thời gian chạy (có, từ chuỗi giao diện người dùng thông qua AsyncTask) làm cho toàn bộ thanh tiến trình ngoại trừ đinh bấm để chuyển sang màu đen hoặc trong suốt.

+0

Một cách tiếp cận tôi có thể nghĩ đến là sử dụng một switcher xem giữa hai seekbars với màu sắc khác nhau, nhưng nếu người dùng đang sử dụng sự kiểm soát theo dõi ở đó thời gian, điều này sẽ không hoạt động. – PseudoNoise

+0

Tính đến giờ làm việc của IRC, hãy thử nghiệm sử dụng invalidateDrawable để không có kết quả. Cũng cố gắng đọc các giá trị của các drawables nhưng mỗi đối tượng (hai màu từ tài nguyên, và getProgressDrawable sau khi thiết lập nó) tất cả đều có các giá trị băm khác nhau. – PseudoNoise

Trả lời

2

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm

enter image description here

enter image description here

enter image description here

này có thể được achived bằng cách tạo drwables tùy chỉnh cho nền và tiến độ thanh seak Xem link này cho mẫu mã.

Xin vui lòng xem các liên kết dưới đây cũng http://javatechig.com/android/android-seekbar-example/

Change the color of a seekbar on onProgressChanged

+0

Có! Câu hỏi của tôi có trước câu hỏi được liên kết trong vài năm, nhưng tôi rất vui khi cuối cùng cũng có câu trả lời (mặc dù tôi đã chuyển từ dự án này). – PseudoNoise

-1

Một SeekBar là một phần mở rộng của ProgressBar có thêm một ngón tay cái có thể kéo được. Người dùng có thể chạm vào ngón tay cái và kéo sang trái hoặc sang phải để đặt mức tiến độ hiện tại hoặc sử dụng các phím mũi tên.

Khi SeekBarChange, onProgressChanged() của OnSeekBarChangeListener sẽ được gọi và nền của màn hình (LinearLayout) sẽ được cập nhật theo giá trị (SeekBar.getProgress()).

main.xml

+1

Điều này hoàn toàn không liên quan đến câu hỏi. OP hỏi về cập nhật màu sắc, và không một lần nào bạn đề cập đến bất cứ điều gì về màu sắc. – lrAndroid

1

SeekColorActivity.java

package com.exercise.seekcolor; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.SeekBar; 

public class SeekColorActivity extends Activity { 

private int seekR, seekG, seekB; 
SeekBar redSeekBar, greenSeekBar, blueSeekBar; 
LinearLayout mScreen; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mScreen = (LinearLayout) findViewById(R.id.myScreen); 
    redSeekBar = (SeekBar) findViewById(R.id.mySeekingBar_R); 
    greenSeekBar = (SeekBar) findViewById(R.id.mySeekingBar_G); 
    blueSeekBar = (SeekBar) findViewById(R.id.mySeekingBar_B); 
    updateBackground(); 

    redSeekBar.setOnSeekBarChangeListener(seekBarChangeListener); 
    greenSeekBar.setOnSeekBarChangeListener(seekBarChangeListener); 
    blueSeekBar.setOnSeekBarChangeListener(seekBarChangeListener); 

} 

private SeekBar.OnSeekBarChangeListener seekBarChangeListener 
= new SeekBar.OnSeekBarChangeListener() 
{ 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
    boolean fromUser) { 
// TODO Auto-generated method stub 
updateBackground(); 
} 
@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 
// TODO Auto-generated method stub 
} 

@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 
// TODO Auto-generated method stub 
} 
}; 

private void updateBackground() 
{ 
seekR = redSeekBar.getProgress(); 
seekG = greenSeekBar.getProgress(); 
seekB = blueSeekBar.getProgress(); 
mScreen.setBackgroundColor(
    0xff000000 
    + seekR * 0x10000 
    + seekG * 0x100 
    + seekB 
); 
} 
} 
+1

Điều đó đặt màu màn hình do thanh tiến trình. Những gì tôi hỏi là làm thế nào để thiết lập màu nền của thanh tiến trình, không phải toàn bộ màn hình. – PseudoNoise

Các vấn đề liên quan