有没有办法动态更改搜索栏的旋钮?

时间:2014-09-30 23:02:26

标签: android

我必须实现这样的事情:

enter image description here

当我滑动时,脸部应该改变位置和可绘制。很左:快乐的脸。非常正确:痛苦的脸。我有6个drawables。

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:2)

SeekBar中的更改设置一个侦听器,并使用setThumb更改drawable。

例如:

Drawable thumbA = getResources().getDrawable(R.drawable.thumb_a);
Drawable thumbB = getResources().getDrawable(R.drawable.thumb_b);

SeekBar seekbar = (SeekBar) findViewById(R.id.my_seekbar);
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        // Your logic to change the thumb drawable here
        if (progress < 42) {
            seekBar.setThumb(thumbA);
        } else {
            seekBar.setThumb(thumbB);
        }
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {}

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {}
});

其他:

在它的基本形式中,SeekBar小部件由三个图像层构成。

1)背景

此drawable填充背景,通常用于表示物理滑块的“槽” 例如,用于Holo Light主题的默认drawable是:

SeekBar Background ... progress_bg_holo_light.9.png

请注意,这是一个9Patch,将根据1像素边框中的指南进行拉伸以填充小部件的背景。

2)进度

这个drawable位于Background的顶部,它的大小由小部件修改,以指示当前的进度状态。
对于Holo Light主题,默认的drawable是:

SeekBar Progress ... progress_primary_holo_light.9.png

请注意,这也是一个9Patch。对于水平SeekBar,它将垂直拉伸以填充小部件的高度,并水平移动到表示当前进度的长度。

3)Thumb

此drawable位于Progress drawable的末尾,通常用于表示物理滑块的“旋钮”。
在未按下状态下用于拇指的默认图像是:

SeekBar Thumb ... seek_thumb_normal.png

请注意,这是 Not 9Patch。对于水平SeekBar,它将在窗口小部件的高度内垂直居中,并水平放置在代表当前进度的位置。

提供自定义绘图

您可以使用mySeekBar.setBackground(Drawable drawable)

设置背景drawable

您可以使用mySeekBar.setProgressDrawable(Drawable drawable)

设置可绘制的进度

当您提供自己的自定义绘图时,您需要确保定义图像,以便它们按照您的意图正确排列。
例如,如果您需要将“插槽”和进度指示器放置在窗口小部件的整体高度较低的位置(这是您需要的),那么您需要添加不可伸展 9Patch图像中的空间。例如:

SeekBar Background Offset ... progress_bg_holo_light_offset.9.png