2010-02-23 67 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