SurfaceView的概念和優點及使用
阿新 • • 發佈:2019-01-29
一、概念:
SurfaceView本身是一個View,符合一切View的特性,需要通過Canvas畫布繪製。
二、優點:
可以在另一個執行緒中更新介面
不會阻礙介面的互動
三、View和SurfaceView的區別
基於View的繪圖效率不高,主要用於動畫變化較少的程式
SurfaceView 繪圖效率較高,用於介面更新頻繁的程式,如相機預覽。
SurfaceView 可以在另一個執行緒中更新介面。
四、SurfaceView 使用方式:
1.佈局中放入SurfaceView
2.實現SurfaceHolder.Callback
3.繪製畫布更新畫布到SurfaceView(本例是在主執行緒中更新,可以另起一個執行緒更新)
通過lockCanvas()將返回繪製的canvas
繪製的過程中,對canvas的繪製不會立刻反應在介面上,直到執行unlockCanvasAndPost()提交剛才修改的介面
SurfaceView surfaceView=(SurfaceView)findViewById(R.id.surfaceview); SurfaceHolder surfaceHolder=(SurfaceHolder) surfaceView.getHolder(); surfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub /** * 獲得canvas的大小並鎖定canvas */ Canvas canvas=holder.lockCanvas(); Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); canvas.drawBitmap(bitmap, 50, 50,new Paint()); /** * 提交更新canvas */ holder.unlockCanvasAndPost(canvas); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } });