android複習路之SurfaceView

surfaceview模版代碼:

基本的surfaceview都需要這樣的模版整理,模版代碼貼到下面區別就是在draw中進行不同的繪圖設計

下面的例子是繪製sin函數

package com.example.zobject.surfaceview;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * Created by zobject on 16/12/12.
 */

public class Myview extends SurfaceView implements SurfaceHolder.Callback, Runnable {

    //holder
    private SurfaceHolder surfaceHolder;
    //繪圖
    private Canvas canvas;
    //子線程
    private boolean myrun;

    private Paint mpaint;
    private Path mpath;
    private int i=0;
    private int j=0;
    public Myview(Context context) {
        super(context);
        initview();
    }


    public Myview(Context context, AttributeSet attrs) {
        super(context, attrs);
        initview();
    }

    public Myview(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initview();
    }

    private void initview() {
        surfaceHolder = getHolder();
        surfaceHolder.addCallback(this);
        setFocusable(true);
        setFocusableInTouchMode(true);
        mpath=new Path();
        mpaint=new Paint(Paint.ANTI_ALIAS_FLAG);
        mpaint.setColor(Color.RED);
        mpaint.setStyle(Paint.Style.STROKE);
        mpaint.setStrokeWidth(10);
        mpaint.setStrokeCap(Paint.Cap.ROUND);
        mpaint.setStrokeJoin(Paint.Join.ROUND);
    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        myrun = true;
        new Thread(this).start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        myrun = false;

    }

    @Override
    public void run() {
        while (myrun) {
            draw();

            i+=1;
            j=(int)(100*Math.sin(i*2*Math.PI/180)+400);
                mpath.lineTo(i,j);
                }
            }



    private void draw() {
        try {
            canvas = surfaceHolder.lockCanvas();
            canvas.drawColor(Color.WHITE);
            canvas.drawPath(mpath, mpaint);
        } catch (Exception e) {
        } finally {
            if (canvas != null) {
                surfaceHolder.unlockCanvasAndPost(canvas);
            }
        }

    }
}
結果截圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章