首页 > 其他分享 >深入Android架构(从线程到AIDL)_14 应用Android的UI框架01

深入Android架构(从线程到AIDL)_14 应用Android的UI框架01

时间:2025-01-06 21:33:54浏览次数:3  
标签:01 14 onDraw paint 线程 Android View line 函数

应用Android的UI框架系列:以设计游戏循环(GameLoop)为例,內容如下:


1. UI线程、 View与onDraw()函数
2. 基本游戏循环(GameLoop)
3. 使用UI线程的MQ(Message Queue)
4. 诞生一个小线程,担任游戏线程
5. 小线程調用postInvalidate()
6. 设计一个GameLoop类别
7. 只诞生一次GameLoop对象

 

1、 UI线程、 View与onDraw()函数
 

  • 游戏的UI画面通常是由大量美工贴图所构成的,并不会使用一般的Layout来布局,而是使用画布(Canvas)来把图片显示于View的窗口里。
  • 在View类里有个onDraw()函数, View类体系里的每一个类都必须覆写(Override) 这个onDraw()函数,来执行实际绘图的动作。
  • 游戏的基本动作就是不断的进行:绘图和刷新(Refresh)画面。其中, onDraw()函数实践画图,将图形绘制于View的画布(Canvas)上,并显示出来;而invalidate()函数则启动画面的刷新,重新調用一次onDraw()函数。
  • 当我们设计myView子类别时,也必须覆写onDraw()函数。在程序执行时, Android框架会进行反向調用到myView的onDraw()函数来进行画图动作。如下图:

2、 基本游戏循环(GameLoop)

  • 游戏的基本动作就是不断的绕回圈(Loop),重复绘图和刷新画面的动作。最简单的循环实现方式是:在onDraw()函数里調用invalidate()函数,就能刷新画面(重新調用一次onDraw()函数)了。
// myView.java
// ………
public class myView extends View {
    private Paint paint= new Paint();
    private int line_x = 100, line_y = 100;
    private float count = 0;
    myView(Context ctx) { super(ctx); }

    @Override 
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //-----------------------------------------------------
        if( count > 12) count = 0;
        int x = (int) (75.0 * Math.cos(2*Math.PI * count/12.0));
        int y = (int) (75.0 * Math.sin(2*Math.PI * count/12.0));
        count++;
        //---------------------------------------------

        canvas.drawColor(Color.WHITE);
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawLine(line_x, line_y, line_x+x, line_y+y, paint);
        paint.setStrokeWidth(2);
        paint.setColor(Color.RED);
        canvas.drawRect(line_x-5, line_y - 5, line_x+5, line_y + 5, paint);
        paint.setColor(Color.YELLOW);
        canvas.drawRect(line_x-3, line_y - 3, line_x+3, line_y + 3, paint);

        try {
            Thread.sleep(1000);
        } catch (InterruptedException ie) {}
        invalidate();
    }
}
  • Android中提供了invalidate()来实现画面的刷新:即触发框架重新执行onDraw()函数来绘图及显示。

     

 

标签:01,14,onDraw,paint,线程,Android,View,line,函数
From: https://blog.csdn.net/soarfeng/article/details/144972565

相关文章

  • 01背包问题 Golang实现
    背包问题的分类:01背包描述:有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。思路分析:问题核心:从给定的......
  • JSP程序设计2016花店在线销售管理系统(源码)
    项目包含:源码、讲解视频、说明文档,部署录像运行环境:推荐jdk1.8开发工具:Eclipse、MyEclipe以及idea(推荐)操作系统:windows108G内存以上(其他windows)浏览器:GoogleChrome(推荐)、Edge、360浏览器;数据库:MySQL5.7;数据库可视化工具:NavicatPremium推荐)以及其他Navicat版本......
  • Spring MVC注解故障追踪记14
    SpringMVC是美团点评很多团队使用的Web框架。在基于SpringMVC的项目里,注解的使用几乎遍布在项目中的各个模块,有Java提供的注解,如:@Override、@Deprecated等;也有Spring提供的注解,如:@Controller、@Service、@Autowired等;同时还可能有自定义注解等。注解一方面可以作为标记说明使......
  • Spring MVC注解故障追踪记14
    SpringMVC是美团点评很多团队使用的Web框架。在基于SpringMVC的项目里,注解的使用几乎遍布在项目中的各个模块,有Java提供的注解,如:@Override、@Deprecated等;也有Spring提供的注解,如:@Controller、@Service、@Autowired等;同时还可能有自定义注解等。注解一方面可以作为标记说明使......
  • ssm在线学习平台erk14程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着互联网技术的不断发展,教育领域也迎来了新的变革。在线学习平台作为一种新兴的教育模式,凭借其便捷性、灵活性和资源丰富性,逐渐受到......
  • Leetcode 3414. Maximum Score of Non-overlapping Intervals
    Leetcode3414.MaximumScoreofNon-overlappingIntervals1.解题思路2.代码实现题目链接:3414.MaximumScoreofNon-overlappingIntervals1.解题思路这一题算是一个比较常规的动态规划的题目吧。首先,我们将所有的区间进行排序,然后考察每一个区间是否选择的情......
  • 洛谷P2670 [NOIP2015 普及组] 扫雷游戏
    一、原理此代码旨在解决扫雷游戏中根据给定的雷区地雷分布情况,计算出每个非地雷格周围的地雷数量,并输出完整雷区信息的问题。核心原理是通过遍历二维的雷区表示数组,针对每个非地雷格,检查其周围八个方向(上、下、左、右、左上、右上、左下、右下)上的格子是否为地雷格(以 * 表示......
  • 关于Android设备序列号获取的方法
    一、获取设备SNSN(序列号作为设备的唯一标识,提供了设备的唯一信息。因此,在大多数情况下,设备SN会作为设备请求的必填参数进行请求。因此,获取设备的SN通常是首要需求。1.通过系统设置查看设备SN在正常使用中,查看设备SN最简单的方法是通过系统设置。一般步骤如下:打开设备“......
  • 中考英语优秀范文-010 The Spring Festival 春节
    1写作要求近年来我国的发展世人瞩目,中国的传统文化正越来越受到各国朋友的关注。请根据提示,以“TheSpringFestival”为题写一篇短文,向外国朋友介绍我国的春节。要求:1、字迹工整,规范;2、80词左右。2优秀范文TheSpringFestivalInChina,theSpringfestivalisthe......
  • msvcp140.dll跑丢啦!快来看看msvcp140.dll丢失的解决方法将其找回
    在使用电脑时,我们可能会遇到提示缺少msvcp140.dll的错误信息。这个提示意味着我们的电脑中缺少MSVCP140.dll这个文件,它是某些程序运行所必需的。如果我们遇到这个问题,应该如何解决呢?本文将详细解析如何解决msvcp140.dll丢失的问题,帮助大家快速解决这个问题。一,了解msvcp140.......