最近花了几天时间写一个帮助自闭症儿童的小项目,项目主要包括4个小游戏,实现的逻辑不难,没太多技术含量,但是有一些小知识点,相当于汇总一下。
写在最上面:当你的项目需要加载很多图片的时候,千万不要在xml文件直接放,最好也不要在java文件里面setbitmap,很有可能内存溢出,强烈建议用开源项目,比如我用的Glide。
首先先献上一波图片:
接下来逐次讲解每一个活动实现:
1.首页的实现,底图是一张图片,主要就是中间风车的转动,那么这里用了网上的方法(用animation动画),先新建一个包,取名 res->anim。然后在anim包,在包里新建一个属性文件,
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
rotate
android:duration
=
"5000"
android:fromDegrees
=
"0"
android:pivotX
=
"50%"
android:pivotY
=
"50%"
android:repeatCount
=
"-1"
android:repeatMode
=
"restart"
android:toDegrees
=
"360"
/>
</
set
>
duration:时间</span>
fromDegrees="0": 从几度开始转</span>t
oDegrees="360" : 旋转多少度</span>
pivotX="50%:旋转中心距离view的左顶点为50%距离,
pivotY="50%: 距离view的上边缘为50%距离
repeatCount="-1":重复次数,-1为一直重复
repeatMode="restart":重复模式,restart从头开始重复
调用:
ImageView imageView = (ImageView) findViewById(R.id.imageview);
//动画
Animation animation = AnimationUtils.loadAnimation(
this
, R.anim.img_animation);
LinearInterpolator lin =
new
LinearInterpolator();
//设置动画匀速运动
animation.setInterpolator(lin);
imageView.startAnimation(animation);
}
以上代码就是网上广为流传的代码,但是有一个点,就是当你的控件转动的时候,其实控件对应的点击事件没有改变过(比如 开始控件在A 位置,现在转动到了B位置你点击B位置无效,必须点击A位置,所以说转动只是视觉效果,控件本身没有改变位置)
在首页,点击风车以外的地方,会停止转动(stop动画) 这个时候,你就会发现,控件回到了原来的位置,这里也验证了上面红色字体的话。
2.点击首页之后,跳转到第一个游戏,下面是图片:
这里先是用了https://blog.csdn.net/sdfsdfdfa/article/details/79862917#reply的幸运夺宝自定义view,有兴趣的可以看看,但是在调用的时候有个问题:当我把抽奖放到活动A ,A中有一个控件,点击跳到活动B,这样做程序会闪退 您的代码我也这样试过,一样闪退,问题是 空指针 ,位置在LuckyBoard.java的 mCanvas 。mCanvas报错空指针
那么我的解决方法就是在报错的地方加上try catch,作者给的解决方法是:
这可能是onSurfaceDestroyed的时候mCanvas置空了,此时线程可能还在运行。把mCanvas置空的表达式注释就可以。
然后这里我也改动了一部分源码,把画矩形的部分稍微改动,具体可以看我的源代码,也可以比对我的之后的效果和原作者给的效果对比。
接下来继续我们的实现,当最后幸运地选择了某一张图片,那么这张图片会显示在 展示台上,然后播报语音。 最后点击展示的图片回退到主界面
3.下面是第二个游戏的实现,这个是个移动图片的游戏,具体做法在上一篇博客中有《android菜鸡提升之路---实现一个积木拼图游戏》下面是
图片:
4.第三个游戏就是显示一条马路,两边有房子,车,点击后,跳出卡片,点击播放,播报出当前卡片的内容:具体实现逻辑是,放一张底图(用Glide,不然很卡,而且容易崩溃),只可以点击的地方放按钮,设置透明度为0,在中间放imageview,先设置不可见,点击按钮后设置可见,可点击。下面是图:
没什么难度,就不放代码了,最后会附上源码,有兴趣可以看看。
5.第五个游戏,先把图片按九宫格放好,必须按照顺序点击才有效,有效后显示动物图片下面是图:
这里附上完整源码:
https://download.csdn.net/download/weixin_38316492/10366184
这里设置了积分,如何没有积分的小朋友,私信一下,看到会给资源。