Android 开发2048 无法显示gameView、Card
最近因为课程需要,开发了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相关推荐
- android 最新 九宫格,Android开发中怎么显示一个九宫格图片
Android开发中怎么显示一个九宫格图片 发布时间:2020-11-21 15:09:33 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关Android开发中怎么显示一个九宫格 ...
- android开发时图片显示不了
或许drawable-anydpi理解成任何放入此的图片将会被任意分辨率手机加载,事实是可能导致图片无法在手机显示,尝试放入drawable-xhdpi试下
- android开发-Listview中显示不同的视图布局
在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能.convertView在Item为单一的同种类型布局时,能够回收并重用,但是 ...
- Android开发笔记(一百四十)Word文件的读取与显示
读取纯文本 现在手机的用途越来越广泛,从原来只有通讯功能的电话,到拍照手机,到上网手机,再到办公手机,可谓是无所不能了.说到办公,除了收发邮件,还有个频繁使用的功能,就是处理word文件.电脑上的of ...
- android下载通知栏,Android开发中实现下载文件通知栏显示进度条
android开发中实现下载文件通知栏显示进度条. 1.使用asynctask异步任务实现,调用publishprogress()方法刷新进度来实现(已优化) public class myasync ...
- android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容
简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...
- Android点击按钮显示密码,Android 开发仿简书登录框可删除内容或显示密码框的内容...
简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...
- Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现NetM ...
- (转)解决android开发人员,手机app图标显示不正确问题
(转)解决android开发人员,手机app图标显示不正确问题 参考文章: (1)(转)解决android开发人员,手机app图标显示不正确问题 (2)https://www.cnblogs.com/ ...
最新文章
- Google发布新的图像压缩技术,最高可节省75%带宽
- 必看!清华大学刘洋教授“浅谈研究生学位论文选题”方法,3月7日1小时视频公开课(附视频PPT下载)...
- 8.Layout布局应用
- 一步一图一代码之排序二叉树
- centos7 r语言安装_R 和 RStudio 的安装及 R Profile 的配置 amp; 初识 R 语言数据爬取...
- java下包内继承时编译不过解决方案
- matlab信号内插,基于VC++和Matlab的数字信号内插处理系统
- matlab火焰测温源程序,一种火焰测温方法与流程
- cheatengine找不到数值_浙江工程勘察资质找谁代办(圆你资质梦)
- 在 JavaScript 中将 String 与 XML 相互转换
- python︱利用dlib和opencv实现简单换脸、人脸对齐、关键点定位与画图
- java三元运算符_java三元运算符详解
- 佳博热敏条码打印机修改ip_佳博打印机修改IP教程.doc
- linux命令整理(三)
- 新加坡政府企业架构:问题、实践和趋势(2008)
- Matlab(将2维图片显示成3维图形)
- C++ Perf性能调优+火焰图调优
- OpenLayers 5 使用GeoJSON进行行政区划剪裁(clip, not mask or filter),非矢量图层覆盖
- matlab斜杠日期,日期用斜线怎么写
- 计算机电脑Windows系统中了faust勒索病毒,phobos勒索家族介绍,Windows用户注意