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
- SurfaceView 模板
- SurfaceView模板
- surfaceView使用模板。
- SurfaceView类的使用模板
- xml布局自定义SurfaceView模板
- android学习笔记 SurfaceView模板
- SurfaceView介绍和通用模板
- surfaceview
- SurfaceView
- surfaceview
- surfaceview
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- SurfaceView
- 开博引言 暨 第一篇《iOS中 类与JSON、字典等的转换》
- 在广播中启动Activity,弹出Dialog需要注意的事项
- 盘点当下最流行的 Java 工具
- ios 添加到系统分享
- HTML中margin与padding的区别
- SurfaceView模板
- Servlet的url-pattern匹配规则
- 1072. Gas Station (30)-PAT甲级真题(Dijkstra)
- 嵌入跨域iframe高度自适应
- 使用纯前端JavaScript 实现Excel IO
- Java8新特性——Lambda表达式(二)Stream语法详解
- Mybatis中resultMap和resultType
- AFNetWork3.0简单封装
- Android.mk的一些事