使SeekBar看起来像ICS样式-SeekBar但允许变色?

时间:2012-08-13 03:29:18

标签: android styles themes drawable seekbar

我想制作一个类似于ICS(Holo)默认SeekBar的SeekBar,但能够改变程序中的颜色。我的应用程序针对的是ICS,但我需要它与Froyo兼容。

我知道我需要设置进度和拇指绘图,我需要能够以编程方式生成这些绘图,以便我可以更改颜色。拇指不应该太难,因为它只是两个同心圆,外面的透明度较低。

我遇到的问题是背景需要只有几个像素高的灰线。如何为一条可作为SeekBar背景的细水平灰线制作Drawable?

编辑:

我现在用这个非常接近:

private int px_to_dip(int x)
{
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, x, res.getDisplayMetrics());
}

@SuppressWarnings("deprecation")
public void setInterfaceColor(int color)
{
    int dip20 = px_to_dip(20);
    int dip40 = px_to_dip(40);
    Bitmap thumbbm = Bitmap.createBitmap(dip40, dip40, Bitmap.Config.ARGB_8888);
    Canvas thumb = new Canvas(thumbbm);
    Paint  thumbp = new Paint(Paint.ANTI_ALIAS_FLAG);
    thumbp.setColor(Color.argb(Color.alpha(color)/2, Color.red(color), Color.green(color), Color.blue(color)));
    thumb.drawCircle(dip20, dip20, dip20, thumbp);
    thumbp.setColor(color);
    thumb.drawCircle(dip20, dip20, px_to_dip(8), thumbp);

    BitmapDrawable thumbdraw = new BitmapDrawable(thumbbm);
    thumbdraw.setBounds(new Rect(0, 0, thumbdraw.getIntrinsicWidth(), thumbdraw.getIntrinsicHeight()));
    sb.setThumb(thumbdraw);
    sb.setThumbOffset(0);

    //int colors[] = {Color.TRANSPARENT, Color.GRAY, Color.TRANSPARENT};
    //GradientDrawable prog = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);
    //prog.setShape(GradientDrawable.RECTANGLE);

    Bitmap progbm = Bitmap.createBitmap(sb.getProgressDrawable().getIntrinsicWidth(), dip40, Bitmap.Config.ARGB_8888);
    Canvas prog = new Canvas(progbm);
    Paint progp = new Paint(Paint.ANTI_ALIAS_FLAG);
    progp.setColor(Color.GRAY);
    prog.drawLine(dip20, dip20, sb.getProgressDrawable().getIntrinsicWidth()-dip20, dip20, progp);
    BitmapDrawable progdraw = new BitmapDrawable(progbm);


    Rect bounds = sb.getProgressDrawable().getBounds();
    sb.setProgressDrawable(progdraw);
    sb.getProgressDrawable().setBounds(bounds);
    sb.refreshDrawableState();
}

问题是背景(应该是1像素高的灰线)从左边开始到最右边,它应该在拇指的中心开始和结束。拇指是一个圆圈。我还需要进行一些调整。我的px_to_dip大部分都有效,但尺寸看起来有些偏差(在我的240dpi Galaxy Note(CM9)和我的160dpi Archos A43(CM7)和HP TouchPad(CM9)上测试过)。我主要关心的是在正确的位置结束的线,因为这是最烦人的事情。

0 个答案:

没有答案