Android 如何更新封装在Framelayout中的surfaceview?
我有一个surfaceview更新问题。 我想创建一个轻量级的增强现实应用程序,所以我做了一个框架布局,后面是camerapreview,前面是扩展的surfaceviewAndroid 如何更新封装在Framelayout中的surfaceview?,android,camera,draw,surfaceview,android-framelayout,Android,Camera,Draw,Surfaceview,Android Framelayout,我有一个surfaceview更新问题。 我想创建一个轻量级的增强现实应用程序,所以我做了一个框架布局,后面是camerapreview,前面是扩展的surfaceview alParent = new FrameLayout(this); alParent.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PA
alParent = new FrameLayout(this);
alParent.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
// Create a new camera view and add it to the layout
cv = new CameraPreview(this,c);
alParent.addView(cv);
// Create a new draw view and add it to the layout
dv = new DrawView(this);
dv.reDraw();
alParent.addView(dv);
之后,我可以在相机照片上画一个圆圈,这很好:
public class DrawView extends SurfaceView
{
问题是,我想更改x和y,并经常重新绘制圆。
我已经知道我必须使用这样的东西:
protected void reDraw()
{
x+=10;
SurfaceHolder surfaceHolder;
surfaceHolder = getHolder();
if(surfaceHolder.getSurface().isValid())
{onDraw(surfaceHolder.lockCanvas());}
else System.out.println("problem");
}
(注意,这只是一个测试圆是否移动的示例)
我的问题是如何以及在何处调用此函数?我认为这是由framelayout引起的复杂问题
如果我在我首先收集的活动(dv.redraw)中调用它,我会得到一个空指针异常。
不管怎样,在活动中有一个while循环可以随时调用这个函数吗?我知道在线程中会更好,但是框架布局把它搞糟了。
感谢您的阅读和帮助!我找到了一个解决方案:
我必须使用invalidate()函数,并重写ondraw()
方法
因此,下面的链接将重新绘制并更新屏幕。它不会改变cv在框架布局中的位置
public void onSensorChanged(SensorEvent event)
{
dv.invalidate();
}
希望它能帮助别人!我找到了一个解决方案:
我必须使用invalidate()函数,并重写ondraw()
方法
因此,下面的链接将重新绘制并更新屏幕。它不会改变cv在框架布局中的位置
public void onSensorChanged(SensorEvent event)
{
dv.invalidate();
}
希望它能帮助别人