Android在SurfaceView做动画一般方法
16lz
2021-01-26
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 }
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- Android(安卓)Service学习之IntentService 深入分析
- Android-AsyncTask源码学习
- ApiDemo/FragmentRetainInstance 解析
- Android在锁屏状态下启动界面
- Android线程Handler小结(一)
- android中短信监听
- 线程池运行多个线程
- Android判断主线程