Android SurfaceView

下面就贴上一个小程序代码,主要运用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进阶资料

【CNN-GRU-Attention】基于卷积神经网络和门控循环单元网络结合注意力机制的多变量回归预测研究(Matlab代码实现)内容概要:本文介绍了基于卷积神经网络(CNN)、门控循环单元网络(GRU)与注意力机制(Attention)相结合的多变量回归预测模型研究,重点利用Matlab实现该深度学习模型的构建与仿真。该模型通过CNN提取输入数据的局部特征,利用GRU捕捉时间序列的长期依赖关系,并引入注意力机制增强关键时间步的权重,从而提升多变量时间序列回归预测的精度与鲁棒性。文中涵盖了模型架构设计、训练流程、参数调优及实际案例验证,适用于复杂非线性系统的预测任务。; 适合人群:具备一定机器学习与深度学习基础,熟悉Matlab编程环境,从事科研或工程应用的研究生、科研人员及算法工程师,尤其适合关注时间序列预测、能源预测、智能优化等方向的技术人员。; 使用场景及目标:①应用于风电功率预测、负荷预测、交通流量预测等多变量时间序列回归任务;②帮助读者掌握CNN-GRU-Attention混合模型的设计思路与Matlab实现方法;③为学术研究、毕业论文或项目开发提供可复现的代码参考和技术支持。; 阅读建议:建议读者结合Matlab代码逐模块理解模型实现细节,重点关注数据预处理、网络结构搭建与注意力机制的嵌入方式,并通过调整超参数和更换数据集进行实验验证,以深化对模型性能影响因素的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值