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

代码:

Activity

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

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进阶群 4112676  可免费获取Android进阶资料

更多相关文章

  1. 按powerkey唤醒启动上层Andord
  2. Android(安卓)椭圆轨迹动画
  3. Android使用LocalSocket抓取数据
  4. Android系列之Message机制的灵活应用
  5. android 获得当前view在屏幕的坐标
  6. 如何分析解决Android(安卓)ANR
  7. android中使用线程(比如修改textview的text)
  8. 史上最全!押题率90%的 Android(安卓)中高级工程师面试复习大纲及
  9. Android中UI线程与后台线程交互设计的5种方法

随机推荐

  1. 【android】音乐播放器之数据存储总结
  2. Windows Azure移动服务更新,支持Android、
  3. Android实现QQ登录(Android(安卓)Studio开
  4. Android(安卓)TTS 中文 文字转语音 使用T
  5. 在android上实现ffmpeg的pipe功能,实现除
  6. Android(安卓)中使用的阿里 mirrors
  7. android棋牌游戏实例,提供源码。
  8. 疯狂连连看学习心得-基于Android(安卓)St
  9. Android(安卓)Studio与夜神模拟器进行连
  10. Android自学笔记:开发常见问题总结