我想在一个SurfaceView中画图,每当SurfaceHolder变化时就重新绘制网格,但是老实现不了

解决方案 »

  1.   

    public class RTMonitorActivity extends Activity{
        // private String dataStr = new String();
        private boolean enRead = false;
        public TextView tvDeviceName;
        public static TextView tvDeviceStatus;    private SurfaceHolder holder;    private BTReadThread mReadThread = new BTReadThread(0);
        private Handler msgHandler;
        private DrawECGWaveForm mECGWF;    private String revTmpStr = new String();    public List<Integer> ECGDataList = new ArrayList<Integer>();
        public boolean ECGDLIsAvailable = true;    private int ECGData = 0;    private int WIDTH;    private int HEIGHT;
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.rtmonitor);
            // Init Resources
            tvDeviceName = (TextView)findViewById(R.id.tvDeviceName);
            tvDeviceStatus = (TextView)findViewById(R.id.tvDeviceStatus);
            final SurfaceView sfvECG = (SurfaceView)findViewById(R.id.sfvECG);
            holder = sfvECG.getHolder();        WIDTH = sfvECG.getWidth();
            HEIGHT = sfvECG.getHeight();
            mECGWF = new DrawECGWaveForm(sfvECG);        tvDeviceStatus.setText("Standby");
            holder.addCallback(new Callback() {
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                    Canvas canvas = holder.lockCanvas(new Rect(0, 80, 260, 530));
                    // 绘制白色背景
                    canvas.drawColor(Color.BLACK);
                    Paint p = new Paint();                p.setStrokeWidth(2);
                    p.setColor(Color.YELLOW);
                    // 绘制坐标轴
                    int length = WIDTH / 10;// 画多少条竖线,竖线之间宽度为
                    int bound = HEIGHT / 10;// 竖长
                    for (int i = 0; i < bound; i++) {
                        for (int j = 0; j < length; j++) {
                            /*
                             * 画竖线
                             */
                            canvas.drawLine(j * length, 0, j * length, HEIGHT, p);
                            /*
                             * 画横线
                             */
                            canvas.drawLine(0, i * bound, WIDTH, i * bound, p);
                        }
                    }
                    // canvas.drawLine(X_OFFSET , centerY , WIDTH , centerY , p);
                    // canvas.drawLine(X_OFFSET , 40 , X_OFFSET , HEIGHT , p);
                    holder.unlockCanvasAndPost(canvas);
                    holder.lockCanvas(new Rect(0, 0, 0, 0));
                    holder.unlockCanvasAndPost(canvas);
                }            @Override
                public void surfaceCreated(final SurfaceHolder myHolder) {
                }            @Override
                public void surfaceDestroyed(SurfaceHolder holder) {            }
            });        try {
                if (BTConnectActivity.mBTSocket.getInputStream() != null) {
                    enRead = true;
                    mReadThread.start();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    这个是部分代码,但是holder添加的callback老是不能回调 不知道为什么