Android - Canvas onDraw 不触发

标签 android view canvas horizontalscrollview

我正在尝试将 Canvas View 添加到水平 ScrollView 内的相对布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#fff"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/hsv"
        android:layout_width="fill_parent"
        android:background="#EEDB00"
        android:layout_height="30mm">

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/canvas"
            android:background="#000"
            android:layout_width="300mm"
            android:layout_height="20mm">
        </RelativeLayout>

    </HorizontalScrollView>
</RelativeLayout>

我创建了一个名为 CanvasView 的类,它扩展了 View,我通过覆盖 onDraw() 绘制了一些基本形状。但是,当我这样做时, Canvas 不会出现在相对布局中:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        cView = new CanvasView(this);
        rLayout = (RelativeLayout)this.findViewById(R.id.canvas);
        rLayout.addView(cView);
    }

但是,当我通过调用 setContentView(cView); 直接添加它时,它起作用了。在挖掘时,我发现当我调用 addView() 时,onDraw() 根本没有触发,因此 Canvas 没有被绘制......任何想法如何解决这个问题?

最佳答案

目前我无法亲自测试,但我认为你的问题是你没有对 View 应用任何 LayoutParams,这可能意味着它不占用屏幕空间。如果一个 View 曾经离开屏幕或完全被遮挡,或者系统以其他方式决定它绘制的任何东西都不可见,那么我相信 onDraw() 根本不会被调用。

在将 View 添加到 RelativeLayout 时尝试为 View 设置一些宽度和高度:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50,50);
rLayout.addView(cView, params);    

关于Android - Canvas onDraw 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705472/

相关文章:

android - 如何在一个应用程序中设置两个不同的启动器名称和图标 (android)

Sql Server 2008 嵌套 View

android - ListView 中的 setOnItemClickListener 影响多行

python - 在 Python 的 Tkinter 主窗口上放置绘图

javascript - 如何在 Firefox 中将 Canvas 扩展到整个视口(viewport)?

java - 播放音乐的Android应用几秒钟后停止工作

java - Android中的线程调用

android - 在Android中获取文件权限(root)

xml - Android 扩展 View 并从 XML 空指针异常创建

javascript - HTML5 Canvas - 用随机像素颜色填充形状?