Android在SurfaceView做动画一般方法

本文介绍了一个使用 Android 的 SurfaceView 和 Canvas 实现动态绘图的应用案例。通过继承 SurfaceView 并实现 Runnable 接口,文章展示了如何在 Android 应用中不断更新和绘制圆形图案,并控制其大小变化。
部署运行你感兴趣的模型镜像

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 }

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值