调整BitmapDrawable或位图尺寸

时间:2011-07-23 22:21:45

标签: android android-layout

我正在尝试创建一个类似于标签的界面,我将通过向左/向右滑动来切换视图。我通过在此处显示的标签图标背面添加蓝色光晕向用户显示他们所在的页面:


我这样做是通过创建一个自定义视图来绘制背景光(如果选中了标签),然后是图标。我的问题是发光太大。我需要做的就是让它变小,这样两边不会像现在一样被剪裁(发光与底部的页面重叠)。

  • 使用XML中的可绘制形状(只是一个简单的径向渐变)创建了光晕。

  • 我尝试在XML中更改形状的大小,但总是相同。我尝试调整属性,并尝试调整高度和宽度。


构造

public TabIconView(Context context, Bitmap tab)
{
    super(context);

    back = BitmapFactory.decodeResource(getResources(), R.drawable.background_blue_glow);
    this.tab = tab;
}

onMeasure和onDraw:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    setMeasuredDimension(tab.getWidth() * 2, tab.getHeight() * 2);
}

@Override
protected void onDraw(Canvas canvas)
{
    width = getMeasuredWidth();
    height = getMeasuredHeight();

    if (selected)
        canvas.drawBitmap(back, (width - back.getWidth()) / 2, (height - back.getHeight()) / 2, null);

    canvas.drawBitmap(tab, (width - tab.getWidth()) / 2, (height - tab.getHeight()) / 2, null);

    super.onDraw(canvas);
}

任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

Canvas.drawBitmap()的一个版本允许您指定在屏幕上绘制时位图所具有的宽度和高度。您还可以在加载位图时简单地重新缩放位图(Bitmap类具有创建缩放版位图的方法。)

答案 1 :(得分:1)

想出来。如果有人想知道...

public TabIconView(Context context, Bitmap tab)
{
    super(context);
    int backSize = (int) (42 * context.getResources().getDisplayMetrics().density + .5f);

    b = BitmapFactory.decodeResource(getResources(), R.drawable.background_blue_glow);
    back = Bitmap.createScaledBitmap(b, backSize, backSize, false);
    this.tab = tab;
}

我必须从shaperawable生成的位图创建一个缩放的位图。