我有一个自定义类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的正确方法?还有其他选择吗?