可以把Surface理解爲顯存的一個映射,寫入到Surface的內容可以直接複製到顯存從而顯示出來,這會使得顯示速度非常快),Surface被銷燬之前必須結束。
代碼塊:
package com.example.lesson_surfaceview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
}
package com.example.lesson_surfaceview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
* Created by Administrator on 2017/3/20 0020.
*/
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable {
public MySurfaceView(Context context) {
super(context);
init();
}
SurfaceHolder holder;
// 創建筆
Paint paint = new Paint();
private void init() {
// 添加回調監聽
holder = getHolder();
// 實現SurfaceHolder.Callback接口
holder.addCallback(this);
// 設置筆的大小(單位float)
paint.setStrokeWidth(100f);
}
private void myDraw(Canvas canvas) {
// 設置畫筆的顏色(把畫筆的顏色設置成隨機顏色,要放到這個方法裏面才能出現重複隨機(循環中調用了這個方法))
paint.setARGB((int) (Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255));
// 設置在畫布畫點(point)和畫筆隨機出現的位置
canvas.drawPoint((int)(Math.random()*getWidth()),(int)(Math.random()*getHeight()),paint);
}
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 實現Runnable接口創建線程開啓線程
new Thread(this).start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void run() {
while(true){
Canvas canvas = holder.lockCanvas();
// 要自己寫Draw方法
myDraw(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
}
運行效果如圖所示