SurfaceView模板

来源:互联网 发布:图像增强软件 编辑:程序博客网 时间:2024/06/03 06:03

MainSV.java

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;/** * Created by TPEC on 2016/8/25. */public class MainSV extends SurfaceView implements SurfaceHolder.Callback,Runnable {    private SurfaceHolder sh;    private Thread th;    private boolean flag;    private Canvas canvas;    private Paint paint;    private int FPS;    private boolean scaleToWidth;    private float scaleRate,scaleTrans;    public MainSV(Context context) {        super(context);        sh=this.getHolder();        sh.addCallback(this);        scaleRate=1;        scaleTrans=0;        scaleToWidth=true;        paint=new Paint();        paint.setTextSize(32);        paint.setColor(Color.WHITE);    }    private void drawSV(){        try{            canvas=sh.lockCanvas();            if(canvas!=null){                canvas.save();                canvas.scale(scaleRate,scaleRate);                if(scaleToWidth)                    canvas.translate(0,scaleTrans);                else                    canvas.translate(scaleTrans,0);                canvas.drawColor(Color.YELLOW);                canvas.drawRect(0,0,1280,720,new Paint());                canvas.drawText("FPS:"+String.valueOf(FPS)+"  "+String.valueOf(scaleRate)+" "+String.valueOf(scaleToWidth),0,32,paint);                canvas.restore();            }        } catch (Exception e){        } finally {            if(canvas!=null)                sh.unlockCanvasAndPost(canvas);        }    }    private void logicSV(){    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if (scaleToWidth) {            event.setLocation(event.getX() / scaleRate, event.getY() / scaleRate - scaleTrans);            if(event.getY()<0||event.getY()>=720)                return false;        }else {            event.setLocation(event.getX() / scaleRate - scaleTrans, event.getY() / scaleRate);            if(event.getX()<0||event.getX()>=1280)                return false;        }        return false;    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        flag=true;        th=new Thread(this);        th.start();    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {        float srw,srh;        srw=(float)width/1280;        srh=(float)height/720;        if(srw>=srh){            scaleRate=srh;            scaleToWidth=false;            scaleTrans=(width/srh-1280)/2;        }else{            scaleRate=srw;            scaleToWidth=true;            scaleTrans=(height/srw-720)/2;        }    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        flag=false;    }    @Override    public void run() {        while(flag){            try{                long tinterval=System.currentTimeMillis();                logicSV();                drawSV();                tinterval=System.currentTimeMillis()-tinterval;                if(tinterval<33){                    FPS=30;                    th.sleep(33-tinterval);                }                else{                    FPS=(int)(1000/tinterval);                }            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}
0 0
原创粉丝点击