在onDraw()事件外部的SurfaceView上绘制

时间:2014-12-13 17:19:02

标签: android surfaceview

我有一个自定义类DrawingView,它扩展了SurfaceView。所有图纸目前都在onTouchEvent() - 事件中发生。那么如何在onTouchEvent之外的SurfaceView上绘制一些东西?

我在我的activity_main.xml中定义了DrawingView:

<com.example.standardbenutzer.adelpath.DrawingView
android:id="@+id/surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"/>

我在MainActivity中试过这个:

DrawingView dV = (DrawingView)findViewById(R.id.surface);
Canvas canv = dV.surfaceHolder.lockCanvas();
Paint paint = new Paint();
paint.setColor(Color.WHITE);
canv.drawPoint(5,5,paint);
dV.surfaceHolder.unlockCanvasAndPost(canv);

但我明白了:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.standardbenutzer.adelpath / com.example.standardbenutzer.adelpath.MainActivity}:java.lang.NullPointerException

这里有任何提示如何在onTouchEvent外面的surfaceView上绘图?


所以扩展SurfaceView的DrawingView现在实现了SurfaceHolder.Callback接口。 所以在不同的构造函数中,我添加了如下的Callback事件:

    public DrawingView(Context context) {
    super(context);
    surfaceHolder.addCallback(this);
}

public DrawingView(Context context, AttributeSet attrs){
    super(context, attrs);
    surfaceHolder.addCallback(this);
}

public DrawingView(Context context, AttributeSet attrs, int defStyle){
    super(context, attrs, defStyle);
    surfaceHolder.addCallback(this);
}

在onSurfaceCreated事件中我渲染图像:

    @Override
public void surfaceCreated(SurfaceHolder holder){
    render(holder);
}

但这仍然在DrawingView类中。如何将DrawingView类之外的绘图部分移动到我的主要活动?例如。我想在按钮点击时渲染我的图像。我仍然没有在谷歌上发现我怎么能做到这一点。也许这不是使用surfaceview的正确方法?还有其他选择吗?

0 个答案:

没有答案