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();//得到surfaceholder27         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();//得到canvas62                 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);//解锁canvas70             }71         }72     }73 }

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)Service学习之IntentService 深入分析
  3. Android-AsyncTask源码学习
  4. ApiDemo/FragmentRetainInstance 解析
  5. Android在锁屏状态下启动界面
  6. Android线程Handler小结(一)
  7. android中短信监听
  8. 线程池运行多个线程
  9. Android判断主线程

随机推荐

  1. 利用Android Studio、MAT对Android进行内
  2. android进程和应用程序的生命周期
  3. 初试Kotlin-使用Kotlin运行Android的第一
  4. Android SharedPreferences 存储复杂对象
  5. Android框架学习笔记02AndroidAsycHttp框
  6. Android异步处理系列文章
  7. Android(安卓)密钥保护和 C/S 网络传输安
  8. Android图形选择 - Selector
  9. Android 摄像头
  10. Android动态效果Animation