Android雙緩衝繪圖 Bitmap和Canvas 一看就懂
阿新 • • 發佈:2019-02-17
package graphics; import java.util.Random; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.Window; public class BitmapActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.setContentView(new DrawView(this)); } public class DrawView extends View { Bitmap bufferBitmap; Canvas bufferCanvas; Point screenSize; Random rand = new Random(); public DrawView(Context context) { super(context); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); screenSize = new Point(metrics.widthPixels - 20, metrics.heightPixels - 20); bufferBitmap = Bitmap.createBitmap(this.screenSize.x,this.screenSize.y, Bitmap.Config.ARGB_8888);//建立記憶體點陣圖 bufferCanvas = new Canvas(bufferBitmap);//建立繪圖畫布 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawOnBuffer(); canvas.drawBitmap(bufferBitmap, 0, 0,new Paint());//在雙緩衝中繪圖,將自定義緩衝繪製到螢幕上 } private void drawOnBuffer() { Paint paint=new Paint(); paint.setAntiAlias(true); bufferCanvas.drawColor(Color.WHITE); for(int n=0;n<500;n++){ //隨機在繪圖畫布上繪製500個圓 int r=rand.nextInt(256); int g=rand.nextInt(256); int b=rand.nextInt(256); paint.setColor(Color.rgb(r, g, b)); int x=rand.nextInt(bufferCanvas.getWidth()); int y=rand.nextInt(bufferCanvas.getHeight()); int radius=rand.nextInt(100)+20; bufferCanvas.drawCircle(x, y, radius, paint); Log.d("Circle", "第n個"+n); } } } }