Android在SurfaceView做动画一般方法
MainActivity
1 package com.example.surfacemove; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.Menu; 6 7 public class MainActivity extends Activity { 8 9 @Override 10 public void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(new MyView(this));//指定界面 13 } 14 15 @Override 16 public boolean onCreateOptionsMenu(Menu menu) { 17 getMenuInflater().inflate(R.menu.activity_main, menu); 18 return true; 19 } 20 21 22 }
MyView
1 package com.example.surfacemove; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import android.graphics.Color; 6 import android.graphics.Paint; 7 import android.graphics.Paint.Style; 8 import android.view.SurfaceHolder; 9 import android.view.SurfaceHolder.Callback; 10 import android.view.SurfaceView; 11 12 public class MyView extends SurfaceView implements Runnable, Callback { 13 14 private Paint paint; 15 private Canvas canvas; 16 private boolean isRunning = true;//标志新线程是否运行 17 private SurfaceHolder sh; 18 private int i; 19 20 public MyView(Context context) { 21 super(context); 22 paint = new Paint(); 23 paint.setStyle(Style.STROKE); 24 paint.setColor(Color.GREEN); 25 paint.setAntiAlias(true); 26 sh = getHolder();//得到surfaceholder 27 sh.addCallback(this);//添加回调 28 } 29 30 public void surfaceChanged(SurfaceHolder holder, int format, int width, 31 int height) {//界面改变时调用 32 33 } 34 35 public void surfaceCreated(SurfaceHolder holder) {//界面创建后调用 36 new Thread(this).start();//开启新线程 37 } 38 39 public void surfaceDestroyed(SurfaceHolder holder) {//界面销毁后调用 40 isRunning = false;//标志位置为假 41 } 42 43 public void run() {//run函数 44 while (isRunning) {//如果标志位为真 45 i++; 46 if(i==50){ 47 i=0; 48 } 49 drawView();//画画面 50 try { 51 Thread.sleep(100);//延时 52 } catch (InterruptedException e) { 53 e.printStackTrace(); 54 } 55 } 56 } 57 58 private void drawView() {//画画函数 59 try { 60 if(sh!=null){//若sh不为空 61 canvas = sh.lockCanvas();//得到canvas 62 canvas.drawColor(Color.BLACK);//清屏 63 canvas.drawCircle(100, 100, i, paint); 64 } 65 } catch (Exception e) { 66 e.printStackTrace(); 67 }finally{ 68 if(canvas!=null){//若canvas不为空 69 sh.unlockCanvasAndPost(canvas);//解锁canvas 70 } 71 } 72 } 73 }