2010-02-23 55 views
8

我希望將進度條的顏色(特別是使用setSecondaryProgress進行更新的次級進度)在運行時跨越某個點時動態更改。如何動態更新SeekBar的顏色?

我已經能夠在我的Activity的onCreate函數(通過調用setProgressDrawable替換我從默認Android版本的水平進度中複製的資源)將我自己的drawable替換爲我的Activity的onCreate函數(從黃色變爲綠色) SDK /平臺/ Android的2.1 /數據/ RES /繪製/ progress_horizo​​ntal.xml)。但是,在運行時更新(是的,從UI線程通過AsyncTask)會導致除thumbtab之外的整個進度欄變黑或透明。

+0

一種方法我能想到的是使用兩個seekbars不同顏色之間的顯示切換,但如果用戶使用的跟蹤控制在那時間,這是行不通的。 – PseudoNoise 2010-02-25 02:33:38

+0

從剛剛開始的IRC辦公時間開始,嘗試使用invalidateDrawable無濟於事。還嘗試讀取drawable的值,但每個對象(資源中的兩種顏色和設置後的getProgressDrawable)都具有不同的散列值。 – PseudoNoise 2010-02-26 02:05:55

回答

-1

SeekBar是ProgressBar的擴展,增加了一個可拖動的拇指。用戶可以觸摸拇指並向左或向右拖動以設置當前進度級別或使用箭頭鍵。

當SeekBarChange時,OnSeekBarChangeListener的onProgressChanged()將被調用,並且屏幕的背景(LinearLayout)將根據值(SeekBar.getProgress())更新。

main.xml中

+1

這與問題完全無關。 OP問及更新顏色,而不是一次提到有關顏色的任何內容。 – lrAndroid 2015-05-04 17:46:34

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

由於進度條是什麼而設置屏幕顏色。我問的是如何設置進度條的背景顏色,而不是整個屏幕。 – PseudoNoise 2011-08-01 18:25:32