首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在GLSurfaceView上强制调用onDrawFrame()?

在GLSurfaceView上强制调用onDrawFrame()的方法是通过设置一个自定义的渲染器,并在渲染器中调用requestRender()方法来通知GLSurfaceView重新绘制。以下是一个简单的示例:

  1. 创建一个自定义的GLSurfaceView类:
代码语言:java
复制
public class MyGLSurfaceView extends GLSurfaceView {
    public MyGLSurfaceView(Context context) {
        super(context);
        setEGLContextClientVersion(2);
        setRenderer(new MyRenderer());
    }

    public void forceRedraw() {
        queueEvent(new Runnable() {
            @Override
            public void run() {
                MyRenderer renderer = (MyRenderer) getRenderer();
                if (renderer != null) {
                    renderer.requestRedraw();
                }
            }
        });
        requestRender();
    }
}
  1. 创建一个自定义的渲染器类:
代码语言:java
复制
public class MyRenderer implements GLSurfaceView.Renderer {
    private boolean mRedrawRequested = false;

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // 初始化渲染器
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        // 调整视口大小
    }

    @Override
    public void onDrawFrame(GL10 gl) {
        // 绘制场景

        if (mRedrawRequested) {
            // 在这里执行需要在onDrawFrame()中执行的操作
            mRedrawRequested = false;
        }
    }

    public void requestRedraw() {
        mRedrawRequested = true;
    }
}
  1. 在需要强制调用onDrawFrame()的地方调用forceRedraw()方法:
代码语言:java
复制
MyGLSurfaceView myGLSurfaceView = (MyGLSurfaceView) findViewById(R.id.my_gl_surface_view);
myGLSurfaceView.forceRedraw();

这样,当调用forceRedraw()方法时,MyRenderer类中的requestRedraw()方法会被调用,标记mRedrawRequested为true,然后调用requestRender()方法通知GLSurfaceView重新绘制。在onDrawFrame()方法中,如果mRedrawRequested为true,则执行需要在onDrawFrame()中执行的操作,并将mRedrawRequested设置为false。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • android视频系列:视频解码篇--android上视频播放的实现

    前言 要开始正儿八经地写视频系列文章了。思来想去,从播放器入手,再合适不过了。视频文件,只有播放出来,才显示出了意义;只有播放出来,才暴露出各种问题。先理解播放的场景,才能更好地理解视频处理时所选取的策略。 播放器做了什么 播放器播放视频,就是一步步剖开视频的内容,显示在屏幕上。 最简单的理解方式,是把视频文件看做一个容纳了很多图片的容器。播放时,从容器里取出一张图片,放到屏幕上显示,隔一点时间后,再从容器里取出下一张图,放到屏幕上。按次序把图片一张一张显示到屏幕上,等到最后一张也显示到屏幕上后,播放就完成

    013
    领券