在Drawable类

时间:2016-09-16 06:50:34

标签: java android android-drawable

我创建了一个扩展Drawable的自定义类。我正在尝试使用onSizeChanged()按照

获取Drawable的尺寸
public class Circle extends Drawable {
    ...
    @Override
    protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
        super.onSizeChanged(xNew, yNew, xOld, yOld);
    }
}

但是我收到一条错误,说“方法不会覆盖超类”。我该怎么做才能解决它?

非常感谢Michael Spitsin这个答案。要获取drawable附加到的布局的尺寸,请使用以下代码

@Override
protected void onBoundsChange(Rect bounds) {
    mHeight = bounds.height();
    mWidth = bounds.width();
}

1 个答案:

答案 0 :(得分:1)

如果我们转到查看source code和Drawable source code,我们会看到下一步:

在View.setBackgroundDrawable(Drawable)中,如果我们传递非null,则更新字段mBackground(负责存储背景drawable)。

如果我们尝试查找方法Drawable.onBoundsChanged()的用法,那么我们将看到它主要用于Drawable.setBounds方法。如果我们找到它的用法,我们将在View.class中看到下一个片段:

private void drawBackground(Canvas canvas) {
    final Drawable background = mBackground;
    if (background == null) {
        return;
    }

    if (mBackgroundSizeChanged) {
        background.setBounds(0, 0,  mRight - mLeft, mBottom - mTop);
        mBackgroundSizeChanged = false;
       rebuildOutline();
    }

    //draw background through background.draw(canvas)
}

因此,您的任务可以使用onBoundsChanged回调。