我创建了一个扩展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的回答。若要获取可绘制对象附加到的布局的尺寸,请使用以下代码

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

最佳答案

如果我们去查看source code并在Drawable source code中,我们将看到以下内容:

如果我们传递的值不为null,则在View.setBackgroundDrawable(Drawable)中,将更新字段mBackground(负责存储背景可绘制对象)。

如果我们尝试查找方法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回调用于您的任务。

关于java - 在Drawable类中使用onSizeChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39525352/

10-12 03:55
查看更多