• 18_SurfaceView 其他线程绘图


    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Paint.Style;
    import android.os.Bundle;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.Window;
    import android.view.WindowManager;

    public class MainActivity extends Activity {     
     
        FastRenderView renderView;           
           
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
            renderView = new FastRenderView(this);
            setContentView(renderView);
        }     
       
        protected void onResume() {
            super.onResume();
            renderView.resume();
        }
       
        protected void onPause() {
            super.onPause();        
            renderView.pause();
        }   
     
    }


    class FastRenderView extends SurfaceView implements Runnable {
        Thread renderThread = null;
        SurfaceHolder holder;
        volatile boolean running = false;
       
        public FastRenderView(Context context) {
            super(context);          
            holder = getHolder();           
        }

        public void resume() {         
            running = true;
            renderThread = new Thread(this);
            renderThread.start();        
        }
       
        public void pause() {       
            running = false;                       
            while(true) {
                try {
                    renderThread.join();
                    break;
                } catch (InterruptedException e) {
                    // retry
                }
            }
            renderThread = null;       
        }
       
        public void run() {
            while(running) { 
                if(!holder.getSurface().isValid())
                    continue;
               
                Canvas canvas = holder.lockCanvas();           
                drawSurface(canvas);                                          
                holder.unlockCanvasAndPost(canvas);           
            }
        }       
       
        private void drawSurface(Canvas canvas) {
         Paint paint =  new Paint();
         paint.setColor(Color.RED);
            canvas.drawRGB(255, 255, 0);
            canvas.drawLine(0, 0, 100, 100,paint);
            canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, 40, paint);
            paint.setStyle(Style.FILL);
            paint.setColor(0x770000ff);
            canvas.drawRect(100, 100, 200, 200, paint);
        }
    }  

  • 相关阅读:
    kvm
    Javascript 笔记与总结(2-7)对象
    [Swift]LeetCode172. 阶乘后的零 | Factorial Trailing Zeroes
    Swift5.3 语言指南(五) 基本运算符
    C#6.0语言规范(一) 介绍
    [Swift]LeetCode171. Excel表列序号 | Excel Sheet Column Number
    [Swift]LeetCode169. 求众数 | Majority Element
    [Swift]LeetCode168. Excel表列名称 | Excel Sheet Column Title
    [Swift]LeetCode167. 两数之和 II
    [Java]LeetCode141. 环形链表 | Linked List Cycle
  • 原文地址:https://www.cnblogs.com/xl711436/p/3060789.html
Copyright © 2020-2023  润新知