程序化地创建 SeekBar

12
我正在以编程方式创建一个SeekBar,代码如下:
SeekBar seekBar = new SeekBar(this);
seekBar.setMax(15);
seekBar.setIndeterminate(true);
seekBar.setMinimumWidth(200);

ShapeDrawable thumb = new ShapeDrawable(new OvalShape());

thumb.getPaint().setColor(0x00FF00);
thumb.setIntrinsicHeight(80);
thumb.setIntrinsicWidth(30);

seekBar.setThumb(thumb);
seekBar.setProgress(1);

但是我所能看到的只有一个小的SeekBar

可能出了什么问题呢?

谢谢。

2个回答

17

尝试使用以下代码

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout.LayoutParams;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class Sample2 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        SeekBar seekBar = new SeekBar(this);
        seekBar.setMax(15);
//      seekBar.setIndeterminate(true);

        ShapeDrawable thumb = new ShapeDrawable(new OvalShape());

        thumb.setIntrinsicHeight(80);
        thumb.setIntrinsicWidth(30);
        seekBar.setThumb(thumb);
        seekBar.setProgress(1);
        seekBar.setVisibility(View.VISIBLE);
        seekBar.setBackgroundColor(Color.BLUE);

        LayoutParams lp = new LayoutParams(200, 50);
        seekBar.setLayoutParams(lp);
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            public void onStopTrackingTouch(SeekBar arg0) {
                // TODO Auto-generated method stub
                System.out.println(".....111.......");

            }

            public void onStartTrackingTouch(SeekBar arg0) {
                // TODO Auto-generated method stub
                System.out.println(".....222.......");
            }

            public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
                // TODO Auto-generated method stub
                System.out.println(".....333......."+arg1);
            }
        });
        setContentView(seekBar);
    }
}

感谢 Deepak


我能看到滚动条,但无法拖动它。 - user790431
嗨,Stone,现在检查我的代码。我已经为SeekBar添加了监听器,现在你可以拖动它了。 - Sunil Kumar Sahoo
SeekBar seekBar = new SeekBar(this); seekBar.setMax(15); ShapeDrawable thumb = new ShapeDrawable(new OvalShape()); thumb.setIntrinsicHeight(100); thumb.setIntrinsicWidth(40); seekBar.setThumb(thumb); seekBar.setProgress(1); seekBar.setBackgroundColor(Color.BLUE); LayoutParams lp = new LayoutParams(400, 20); seekBar.setLayoutParams(lp); - user790431
我该如何更改已经进度的SeekBar的颜色?例如,SeekBar已经进度的部分是绿色的,未进度的部分是蓝色的。你明白我想说什么吗? - user790431
请查看以下链接以了解如何通过SeekBar更改背景颜色:http://android-er.blogspot.com/2009/08/change-background-color-by-seekbar.html - Sunil Kumar Sahoo
如何更改SeekBar音量控制的图像。当音量为零时,静音图标,否则为正常拇指图标。 - Harsha

0
尝试删除 seekBar.setIndeterminate(true);,这可能会产生不良影响。

1
seekbar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal)); 这个怎么样? - Mark Allison
是的。我尝试给宽度赋值400,但宽度没有改变。我还尝试了LayoutParams.fill_parent,但也没有起作用。 - user790431
也许这是您视图层次结构的问题。您将此控件添加到哪个父级?如果父级设置为WRAP_CONTENT,那么您会看到这种行为。 - Mark Allison
我将它添加到线性布局中,但是没有为它设置任何布局参数。现在在你建议的更改后,我能够看到400宽的空间,但是拖动条不可见。 - user790431
我刚刚成功让它工作了。我正在编辑我的问题并将正确的代码放入其中。 - user790431
SeekBar seekBar = new SeekBar(this); seekBar.setMax(15); ShapeDrawable thumb = new ShapeDrawable(new OvalShape()); thumb.setIntrinsicHeight(100); thumb.setIntrinsicWidth(40); seekBar.setThumb(thumb); seekBar.setProgress(1); seekBar.setBackgroundColor(Color.BLUE); LayoutParams lp = new LayoutParams(400, 20); seekBar.setLayoutParams(lp); - user790431

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接