我必须实现这样的事情:
当我滑动时,脸部应该改变位置和可绘制。很左:快乐的脸。非常正确:痛苦的脸。我有6个drawables。
任何想法如何做到这一点?
答案 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是:
... progress_bg_holo_light.9.png
请注意,这是一个9Patch,将根据1像素边框中的指南进行拉伸以填充小部件的背景。
2)进度
这个drawable位于Background的顶部,它的大小由小部件修改,以指示当前的进度状态。
对于Holo Light主题,默认的drawable是:
... progress_primary_holo_light.9.png
请注意,这也是一个9Patch。对于水平SeekBar,它将垂直拉伸以填充小部件的高度,并水平移动到表示当前进度的长度。
3)Thumb
此drawable位于Progress drawable的末尾,通常用于表示物理滑块的“旋钮”。
在未按下状态下用于拇指的默认图像是:
... seek_thumb_normal.png
请注意,这是 Not 9Patch。对于水平SeekBar,它将在窗口小部件的高度内垂直居中,并水平放置在代表当前进度的位置。
提供自定义绘图
您可以使用mySeekBar.setBackground(Drawable drawable)
您可以使用mySeekBar.setProgressDrawable(Drawable drawable)
当您提供自己的自定义绘图时,您需要确保定义图像,以便它们按照您的意图正确排列。
例如,如果您需要将“插槽”和进度指示器放置在窗口小部件的整体高度较低的位置(这是您需要的),那么您需要添加不可伸展 9Patch图像中的空间。例如:
... progress_bg_holo_light_offset.9.png