最近因为课程需要,开发了2048这款经典游戏,在开发过程中遇到了addCards无法成功的原因,后来在网上找了帖子,具体看链接如果按博主这样做的话,后面成绩计分时又会出现问题,后来查看资料弄清原理后,得到了解决方法。
出错原因:
1.onSizeChange这个方法是在构造函数执行之后才会执行的,而这个时候布局已经完成了,所以没有办法将卡片加入到布局当中去。
解法:
获得系统的长宽高:

private int GetCardWidth(){//屏幕信息的对象DisplayMetrics displayMetrics;displayMetrics = getResources().getDisplayMetrics();//获取屏幕信息int cardWidth;cardWidth = displayMetrics.widthPixels;return (cardWidth-10)/4;}

在游戏初始化函数中加入addCards函数

    private void initGameView(){setColumnCount(4);//这里之所以要减25是为了留间隙addCard(GetCardWidth(),GetCardWidth());//添加卡片setOnTouchListener(new View.OnTouchListener(){............................});startGame();//开始游戏}

2.但是如果这样修改了之后,在成绩统计时,在startGame()中加入MainActivity.getMainActivity().clearScore();时有出问题,导致界面无法显示,原因是因为构造函数生命期。
最终解法:
1)不能在initGame()中调用startGame(),应该在onSizeChanged()时调用,当应用程序界面发送改变时,会自动调用该函数,也就是在构造函数之后去调用该函数
2)onSizeChanged()中原本的addCards()的函数要去掉,因为已经在构造函数中分配了Cards

    private void initGameView(){setColumnCount(4);//这里之所以要减25是为了留间隙addCard(GetCardWidth(),GetCardWidth());//添加卡片setOnTouchListener(new View.OnTouchListener(){............................});//startGame();不要在这里调用}
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);//由于该函数在构造函数之后,也就是布局完成之后执行,所以不能在这里分配Card的长度和宽度
//        Config.CARD_WIDTH = (Math.min(w,h)-10)/4;//求卡片
//        addCard(Config.CARD_WIDTH -25,Config.CARD_WIDTH -25);startGame();}

这样问题便解决了,可以得到完美结果

Android 开发2048 无法显示gameView、Card相关推荐

  1. android 最新 九宫格,Android开发中怎么显示一个九宫格图片

    Android开发中怎么显示一个九宫格图片 发布时间:2020-11-21 15:09:33 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关Android开发中怎么显示一个九宫格 ...

  2. android开发时图片显示不了

    或许drawable-anydpi理解成任何放入此的图片将会被任意分辨率手机加载,事实是可能导致图片无法在手机显示,尝试放入drawable-xhdpi试下

  3. android开发-Listview中显示不同的视图布局

    在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能.convertView在Item为单一的同种类型布局时,能够回收并重用,但是 ...

  4. Android开发笔记(一百四十)Word文件的读取与显示

    读取纯文本 现在手机的用途越来越广泛,从原来只有通讯功能的电话,到拍照手机,到上网手机,再到办公手机,可谓是无所不能了.说到办公,除了收发邮件,还有个频繁使用的功能,就是处理word文件.电脑上的of ...

  5. android下载通知栏,Android开发中实现下载文件通知栏显示进度条

    android开发中实现下载文件通知栏显示进度条. 1.使用asynctask异步任务实现,调用publishprogress()方法刷新进度来实现(已优化) public class myasync ...

  6. android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  7. Android点击按钮显示密码,Android 开发仿简书登录框可删除内容或显示密码框的内容...

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  8. Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现NetM ...

  9. (转)解决android开发人员,手机app图标显示不正确问题

    (转)解决android开发人员,手机app图标显示不正确问题 参考文章: (1)(转)解决android开发人员,手机app图标显示不正确问题 (2)https://www.cnblogs.com/ ...

最新文章

  1. Google发布新的图像压缩技术,最高可节省75%带宽
  2. 必看!清华大学刘洋教授“浅谈研究生学位论文选题”方法,3月7日1小时视频公开课(附视频PPT下载)...
  3. 8.Layout布局应用
  4. 一步一图一代码之排序二叉树
  5. centos7 r语言安装_R 和 RStudio 的安装及 R Profile 的配置 amp; 初识 R 语言数据爬取...
  6. java下包内继承时编译不过解决方案
  7. matlab信号内插,基于VC++和Matlab的数字信号内插处理系统
  8. matlab火焰测温源程序,一种火焰测温方法与流程
  9. cheatengine找不到数值_浙江工程勘察资质找谁代办(圆你资质梦)
  10. 在 JavaScript 中将 String 与 XML 相互转换
  11. python︱利用dlib和opencv实现简单换脸、人脸对齐、关键点定位与画图
  12. java三元运算符_java三元运算符详解
  13. 佳博热敏条码打印机修改ip_佳博打印机修改IP教程.doc
  14. linux命令整理(三)
  15. 新加坡政府企业架构:问题、实践和趋势(2008)
  16. Matlab(将2维图片显示成3维图形)
  17. C++ Perf性能调优+火焰图调优
  18. OpenLayers 5 使用GeoJSON进行行政区划剪裁(clip, not mask or filter),非矢量图层覆盖
  19. matlab斜杠日期,日期用斜线怎么写
  20. 计算机电脑Windows系统中了faust勒索病毒,phobos勒索家族介绍,Windows用户注意

热门文章

  1. 读懂 SSD – 什么是顺序读写、随机读写、4K读写、IOPS值?
  2. c语言实现url编码源码,URL encode 与 URL decode 的C语言实现
  3. [深度分析]我对区块链的认识--概述(一)
  4. 华为鸿蒙cpu,华为转投第三大CPU架构RISC-V?首款鸿蒙开发板曝光
  5. 开源私有lorawan server搭建
  6. ZYNQ从放弃到入门(三)- 中断(一)
  7. bash内置文档(ubuntu20.10)
  8. 基于随机森林、svm、CNN机器学习的风控欺诈识别模型
  9. 你不得不会的EXCEL选择性粘贴
  10. A-4-YUM安装kubernetes