Android Studio
SurfaceView
MainSV.java
public class MainSV extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private SurfaceHolder sh;
private Thread th;
private boolean flag;
private Paint paint;
private int FPS;
private float scalerw,scalerh;
private Canvas canvas;
public MainSV(Context context){
super(context);
sh=this.getHolder();
sh.addCallback(this);
paint=new Paint();
paint.setColor(Color.WHITE);
setFocusable(true);
}
@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) {
scalerw=(float)width/720;
scalerh=(float)height/1280;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag=false;
}
public void logicSV(){
//logic
}
public void drawSV(){
try{
canvas=sh.lockCanvas();
if(canvas!=null){
canvas.save();
canvas.scale(scalerw,scalerh);
canvas.drawText("FPS:"+String.valueOf(FPS)+" "+String.valueOf(scalerw)+"*"+String.valueOf(scalerh),0,30,paint);
canvas.restore();
}
} catch (Exception e){
} finally {
if(canvas!=null)
sh.unlockCanvasAndPost(canvas);
}
}
@Override
public void run() {
while(flag){
long tinterval=System.currentTimeMillis();
logicSV();
drawSV();
tinterval=System.currentTimeMillis()-tinterval;
try{
if(tinterval<33){
FPS=30;
Thread.sleep(33-tinterval);
}else{
FPS=1000/(int)tinterval;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
drawSV()中:
內容 | 位置 |
---|---|
文本 | canvas.scale()和canvas.restore()之間 |
圖片 | 圖片無需縮放,圖片位置需要*scalerw(h) |
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
MainSV mainsv=new MainSV(this);
setContentView(mainsv);
}
@Override
protected void onResume(){
if(getRequestedOrientation()!= ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
super.onResume();
}
}
屏幕 | ActivityInfo. |
---|---|
豎屏 | SCREEN_ORIENTATION_PORTRAIT |
橫屏 | SCREEN_ORIENTATION_LANDSCAPE |