android - 在我的 LinearLayout 上画东西?

标签 android

我正在扩展 LinearLayout:

public class MyLinearLayout extends LinearLayout {
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(0xFFFF0000);
        canvas.drawLine(0, 0, getWidth(), getHeight(), paint);
    }
}

如果布局有子元素,上面的红线不应该画在它们上面吗?考虑这样的布局:

<MyLinearLayout>
    <ImageView />
</MyLinearLayout>

我希望在子 ImageView 上方绘制红线。但它被绘制在它下面。我假设在 super.onDraw() 行完成后,所有子绘图都会完成。

在所有子绘图完成后,是否有办法到达 Canvas 并在其上绘制一些东西?

谢谢

最佳答案

布局不会绘制,除非您调用 setWillNotDraw(false);。他们这样做是出于效率原因。

编辑:

onDraw() 实际上只是允许您在绘图操作发生之前修改 Canvas。它实际上并不绘制。你想要做的是像这样覆盖 draw():

@Override
protected void draw(Canvas canvas) {
    super.draw(canvas);

    Paint paint = new Paint();
    paint.setColor(0xFFFF0000);
    canvas.drawLine(0, 0, getWidth(), getHeight(), paint);
}

调用 super 将绘制 View 中的所有子项。然后它将绘制所有线条。不过,我仍然相信您需要调用 setWillNotDraw(false)

关于android - 在我的 LinearLayout 上画东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727225/

相关文章:

android - 如何访问 webview 中包含的 html 元素?

android - iOS中的onDraw相当于什么

android - 有人可以向我解释 FindViewById(1) 或 FindViewById(2) 背后的魔力吗?

java - 在Android中离线存储高分辨率图片

java - 棉花糖权限及说明

java - Android webview 不显示图像

android - 如何在直接数据库访问和内容提供者之间做出决定?

android - 如何在 Android Studio 中的文件中搜索方法

Android M - 使用新权限升级我的应用程序

android - android tabwidget 的现有补丁允许左侧的标签?