gpt4 book ai didi

Android中SurfaceView用法简单实例

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Android中SurfaceView用法简单实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了Android中SurfaceView用法。分享给大家供大家参考,具体如下:

这里贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置 。

代码:

Activity:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.view;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super .onCreate(savedInstanceState);
      // 隐藏状态栏
      this .getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
          WindowManager.LayoutParams.FLAG_FULLSCREEN);
      // 把Activity的标题去掉
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      // 设置布局
      this .setContentView( new MySurfaceView( this ));
    }
}

SurfaceView:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Runnable, Callback {
    private SurfaceHolder mHolder; // 用于控制SurfaceView
    private Thread t; // 声明一条线程
    private boolean flag; // 线程运行的标识,用于控制线程
    private Canvas mCanvas; // 声明一张画布
    private Paint p; // 声明一支画笔
    private int x = 50 , y = 50 , r = 10 ; // 圆的坐标和半径
    public MySurfaceView(Context context) {
      super (context);
      mHolder = getHolder(); // 获得SurfaceHolder对象
      mHolder.addCallback( this ); // 为SurfaceView添加状态监听
      p = new Paint(); // 创建一个画笔对象
      p.setColor(Color.WHITE); // 设置画笔的颜色为白色
      setFocusable( true ); // 设置焦点
    }
    /**
    * 自定义一个方法,在画布上画一个圆
    */
    public void Draw() {
      mCanvas = mHolder.lockCanvas(); // 获得画布对象,开始对画布画画
      mCanvas.drawRGB( 0 , 0 , 0 ); // 把画布填充为黑色
      mCanvas.drawCircle(x, y, r, p); // 画一个圆
      mHolder.unlockCanvasAndPost(mCanvas); // 完成画画,把画布显示在屏幕上
    }
    /**
    * 当SurfaceView创建的时候,调用此函数
    */
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
      t = new Thread( this ); // 创建一个线程对象
      flag = true ; // 把线程运行的标识设置成true
      t.start(); // 启动线程
    }
    /**
    * 当SurfaceView的视图发生改变的时候,调用此函数
    */
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    }
    /**
    * 当SurfaceView销毁的时候,调用此函数
    */
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
      flag = false ; // 把线程运行的标识设置成false
    }
    /**
    * 当屏幕被触摸时调用
    */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
      x = ( int ) event.getX(); // 获得屏幕被触摸时对应的X轴坐标
      y = ( int ) event.getY(); // 获得屏幕被触摸时对应的Y轴坐标
      return true ;
    }
    /**
    * 当用户按键时调用
    */
    @Override
    public boolean onKeyDown( int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_DPAD_UP){  //当用户点击↑键时
        y--;  //设置Y轴坐标减1
      }
      return super .onKeyDown(keyCode, event);
    }
    @Override
    public void run() {
      while (flag) {
        Draw(); // 调用自定义画画方法
        try {
          Thread.sleep( 50 ); // 让线程休息50毫秒
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
}

MySurfaceView首先继承SurfaceView,然后实现Runnable和Callback接口 。

重写了Runnable的run方法和Callback的surfaceCreated(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width,int height),surfaceDestroyed(SurfaceHolder holder)方法, 。

还实现了onTouchEvent(MotionEvent event),onKeyDown(int keyCode, KeyEvent event)方法来,详细的在代码里已注释.

希望本文所述对大家Android程序设计有所帮助.

最后此篇关于Android中SurfaceView用法简单实例的文章就讲到这里了,如果你想了解更多关于Android中SurfaceView用法简单实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com