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 }

 

posted @ 2012-07-13 23:28  丛林听雨  阅读(1636)  评论(0编辑  收藏  举报