package com.example.surfacemove;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));//指定界面
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
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 }
本文介绍了一个使用 Android 的 SurfaceView 和 Canvas 实现动态绘图的应用案例。通过继承 SurfaceView 并实现 Runnable 接口,文章展示了如何在 Android 应用中不断更新和绘制圆形图案,并控制其大小变化。
3155

被折叠的 条评论
为什么被折叠?



