自定义视图组上的九个补丁

时间:2011-06-01 14:43:03

标签: android custom-view viewgroup nine-patch

我制作了一个9补丁和一个自定义视图组,然后我将该视图组的背景设置为九补丁。

问题是:九补丁忽略了“内容区”设置。

那么:我如何在自定义视图中正确使用九补丁?

OR:

我如何从九个补丁中获取内容区域,以便在OnMeasure和OnLayout数学中使用它?

3 个答案:

答案 0 :(得分:6)

还可以在NinePatchDrawable上使用boolean getPadding(Rect padding)来获取内容的填充(您的内容+ 9patch padding =总组dize)

答案 1 :(得分:0)

您可能需要通过覆盖其onDraw方法直接在ViewGroup上绘制对象:

public void onDraw(Canvas canvas) {
 NinePatchDrawable bg =  (NinePatchDrawable) resources.getDrawable(id);
 if (bg != null) {
  bg.setBounds(0, 0, getWidth(), getHeight());
  bg.draw(canvas);
  }
 }

答案 2 :(得分:0)

在onMeasure中获取背景的填充以减小可用宽度(这是用于在网格中布置单元格):

    @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable background = getBackground();
    Rect padding = new Rect();
    if (background != null && background.getPadding(padding));

    int width = MeasureSpec.getSize(widthMeasureSpec);
    int availableWidth = width - padding.left - padding.right;

对于onLayout,应用了填充:

    @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int availableWidth = r - l - getPaddingLeft() - getPaddingRight();