public class CanvasTest extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new CanvasView(this));
}
}
class CanvasView extends SurfaceView implements Callback,Runnable{
private Thread mThread;
private Canvas mCanvas;
private boolean mFlag;
private Paint mPaint;
private SurfaceHolder mSurfaceHolder;
private PaintFlagsDrawFilter mPaintFlagsDrawFilter=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
public CanvasView(Context context) {
super(context);
mSurfaceHolder=this.getHolder();
mSurfaceHolder.addCallback(this);
mPaint=new Paint();
mPaint.setAntiAlias(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mFlag=true;
mThread=new Thread(this,"My Thread");
mThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mFlag=false;
}
@Override
public void run() {
while (mFlag) {
long start=System.currentTimeMillis();
myDraw();
logic();
long end=System.currentTimeMillis();
if ((end-start)<50) {
try {
Thread.sleep(50-(end-start));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private void logic() {
// TODO Auto-generated method stub
}
private void myDraw() {
try {
mCanvas=mSurfaceHolder.lockCanvas();
if (mCanvas != null) {
//Set the canvas drawing non-serrated
mCanvas.setDrawFilter(mPaintFlagsDrawFilter);
//Use fill color refresh
mCanvas.drawColor(Color.WHITE);
//Draw text
mCanvas.drawText("DrawText", 10, 10, mPaint);
//Draw pixel
mCanvas.drawPoint(10, 20, mPaint);
//Draw multiple pixels
mCanvas.drawPoints(new float[]{10,30,30,30}, mPaint);
//Draw line
mCanvas.drawLine(10, 40, 50, 40, mPaint);
//Draw multiple lines
mCanvas.drawLines(new float[]{10,50,50,50,70,50,110,50}, mPaint);
//Draw Rect
mCanvas.drawRect(10, 60, 70, 100, mPaint);
//Draw Rect
Rect rect=new Rect(10, 110, 70, 150);
mCanvas.drawRect(rect, mPaint);
//Draw RoundRect
RectF rectF=new RectF(10,160,70,200);
mCanvas.drawRoundRect(rectF, 20, 20, mPaint);
//Draw circle
mCanvas.drawCircle(30, 230, 20, mPaint);
//Draw Arc
mCanvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, mPaint);
//Draw oval
mCanvas.drawOval(new RectF(150, 80, 180,100), mPaint);
//Draw path
Path path=new Path();
path.moveTo(150, 110);
path.lineTo(200, 100);
path.lineTo(200, 130);
mCanvas.drawPath(path, mPaint);
//Draw the specified path graph
Path pathCicle=new Path();
pathCicle.addCircle(150, 180, 30, Direction.CCW);//Add a circle path
mCanvas.drawTextOnPath("PathText", pathCicle, 10, 20, mPaint);//Draw the path of the text with graphics
}
} catch (Exception e) {
// TODO: handle exception
}finally{
if (mCanvas != null) {
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
}
}
}
}
Canvas画布
最新推荐文章于 2024-04-23 16:34:08 发布