热门IT资讯网

SurfaceView 连续渲染 SurfaceHolder Canvas

发表于:2024-11-29 作者:热门IT资讯网编辑
编辑最后更新 2024年11月29日,Canvas canvas = holder.lockCanvas();canvas.drawRGB(255, 0, 0);holder.unlockCanvasAndPost(canvas);第一行
Canvas canvas = holder.lockCanvas();canvas.drawRGB(255, 0, 0);holder.unlockCanvasAndPost(canvas);

第一行,锁定Surface用于渲染并返回一个可用的Canvas

第二行,解锁Surface并确保通过Canvas进行绘制的内容可显示到屏幕上


例子:

import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.view.Menu;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MainActivity extends Activity {          FastRenderView renderView;          protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        renderView = new FastRenderView(this);        setContentView(renderView);    }    protected void onResume() {//重载        super.onResume();        renderView.resume();    }    class FastRenderView extends SurfaceView implements Runnable    {        Thread renderThread = null;        SurfaceHolder holder = null;        volatile boolean running = false;        public FastRenderView(Context context) {            super(context);            holder = getHolder();        }        public void resume()//自定义        {            running = true;            renderThread.start();        }        public void run()        {            while(running)            {                if(!holder.getSurface().isValid())                    continue;                Canvas canvas = holder.lockCanvas();                canvas.drawRGB(255, 0, 0);                holder.unlockCanvasAndPost(canvas);            }        }        public void pause()//自定义        {            running = false;            while(true)            {                try {                    renderThread.join();                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }}


0