12

如何在自定义视图中的画布顶部绘制按钮?(最好在右中侧)在做 button.draw(canvas) 之前我有什么需要调用的吗?

    public class MyClass extends View {
    public Simulation(Context context) {
            super(context);
            pauseButton.setText("TestButton");
            pauseButton.setClickable(true);
            pauseButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
            Log.i(TAG, "Button Pressed!");
            }
            });
    public onDraw(Canvas canvas) {
           super.onDraw(canvas);
           pauseButton.draw(canvas);
    }
    }

谢谢你的时间

4

3 回答 3

16

您不能将按钮插入画布。Canvas 是位图的接口或视图的位图缓冲区。您只能在其中绘制其他位图或像素,不能插入对象或小部件。

有一些解决方案:

  1. 正如 Nikolay 建议的那样,使用FrameLayout并创建两个层(视图),第一个是您的自定义视图,第二个是 LinerView 或 RelativeView,它将位于顶部,您可以在其中拥有按钮等

  2. 在 Canvas 上绘制一个按钮的图像,然后在您的自定义视图中使用onTouchEvent并测试触摸的坐标,然后做一些事情......这里的 onTouchEvent 示例:使位图的某些区域在触摸时透明

于 2011-08-13T13:40:42.027 回答
6

为什么需要自己绘制按钮?使用 FrameLayout 并简单地将按钮覆盖在您的自定义视图上。

于 2011-08-13T05:03:30.977 回答
-1

尝试这个

public onDraw(Canvas canvas) {
       super.onDraw(canvas);
       canvas.save();
       pauseButton.draw(canvas);
       canvas.restore();
}
于 2011-08-13T05:34:22.180 回答