一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何使用SurfaceView实现鱼儿游动动画

时间:2022-06-25 23:00:35 编辑:袖梨 来源:一聚教程网

本文实例为大家分享了使用SurfaceView实现动画的具体代码,供大家参考,具体内容如下

与自定义view绘图进行对比:

1.view绘图没有双缓冲机制,而surfaceview有

2.view绘图更新时,要全部更新整张图片,而surfaceview可以更新部分区域

3.新线程无法直接更新view绘图,需要handler配合。

鱼儿游动的动画:

 
 
  
 

java代码:

public class FishView extends SurfaceView implements SurfaceHolder.Callback{ 
 private SurfaceHolder holder; 
 private UpdateViewThread updatethread; 
 private boolean hasSurface; 
 private Bitmap back; 
 private Bitmap[] fishs; 
 private int fishIndex = 0;//绘制第几张鱼 
 //鱼的初始位置 
 private float fishx = 778; 
 private float fishy = 500; 
 private float fishSpeed = 6; //鱼的游动速度 
 //鱼的游动角度 
 private int fishAngle = new Random().nextInt(60); 
 Matrix matrix = new Matrix(); 
 
 public FishView(Context context) { 
  super(context); 
  Log.i("mydate" , "开始"); 
  //获取surfaceview的surfaceholder,并将该类的实例作为其callback 
  holder = getHolder(); 
  holder.addCallback(this);//以自身作为callback,回调方法 
  hasSurface = false; 
  back = BitmapFactory.decodeResource(context.getResources() , R.drawable.fishbg);//背景 
  int[] id = new int[]{R.drawable.fish0 , R.drawable.fish1 , R.drawable.fish2 ,R.drawable.fish3 ,R.drawable.fish4 ,R.drawable.fish5 ,R.drawable.fish6 ,R.drawable.fish7 ,R.drawable.fish8, R.drawable.fish9}; 
  fishs = new Bitmap[10]; 
  //初始化 鱼游动的10张图 
  for (int i = 0 ; i 

位置计算图片解释如下:

Math.toRadians(fishAngle) 

先理解这句代码的意思:将0-360的角度制角度转化为pi弧度制角度

鱼儿不停的游动,坐标改变其实就是:

当前的x坐标 - 速度*cos角度 , 当前的y坐标 - 速度*sin角度

热门栏目