温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

一个android应用效果开发引发的惨案(android Home按键)

发布时间:2020-07-09 22:23:59 来源:网络 阅读:686 作者:滴掉ANDROID 栏目:移动开发
   看电影的时候,想必大家经常会在电影开场的时候看见一段故事梗概的介绍,其中有一种显示的效果是一个字一个字先后顺序出现在屏幕上的,并且每出现一个字,还有一个键盘打字的声音出现。这个在android上面怎么做呢?
最近做的一个游戏,用到了这个效果,我是这样做的。
首先,重写了一个SurfaceView。在这个SurfaceView里面去显示我的这段故事梗概的文字。那如何去实现按照顺序一个字一个字显示出来呢?Thread 首当其冲想到的就是他了。
开一个线程去做这个事情,每显示一个字,就让线程sleep一下,然后再显示一个字,最后直到显示了所有的字。这个时候就释放这个线程。
那具体怎么做呢?下面一步一步来:(由于代码太多,我只贴重要的核心代码)
第一步:
        重写一个自己的Thread 命名为MyThread。
        MyThread 的run方法实现:
                                 public void run() {
                                                          while(my_thread_runing){ // 这里my_thread_runing 是一个boolean变量,用                                                                                                           //于控制线程是否运行
                                                               if(play_text_all_nums > play_text_nums && holder != null)
                                                                    {//play_text_all_nums  代表所有显示字的数量。play_text_nums  代表                                                                          //当前显示的字数
                                                                            get_the_main_explain_currtext(); //计算出当前显示的那些字
                                                                            Draw_the_main_explain_text(holder);//显示出这些字
                                                                            synchronized (this) {  
                                                                           try {  
                                                                                           Thread.sleep(300);
                                                                                  } catch (InterruptedException e) {  
                                                                              e.printStackTrace();  
                                                                           }  
                                                                       }
                                                                 }
                                                            else
                                                               {//否则停止线程
                                                                   my_thread_runing = false;
                                                                   first_into = false;
                                                                   if(my_thread != null) my_thread.interrupt();
                                                                   }

                                                           }
                                            }

第二步:解释则个函数的实现get_the_main_explain_currtext(); //计算出当前显示的那些字

            首先:由字符串ID取出所有的字(这里这个字符串有一个特点:字与字间有一个空格),然后计算出一个有多少个字play_text_all_nums
             然后:每一次取出需要显示的字装载到一个新的字符串变量里面String str_text_curr;

OK。这样就实现了。下面问题来了。
当正在一个个显示字的时候,按home按键退出,然后在进入这个应用时候!可能出现一个问题:那就是  MyThread这个线程跑不起来。
因为这一次进入 MyThread根本没有start。当然,这里不是讨论为什么出现这个问题。而是想说home按键。网上有大量的人询问如何屏蔽home按键这个时间。其实google是没有开放home按键事件,也就是这个按钮的事件消息不会上传到APP通知我们的。既然google没有开放,我认为大家还是不要这么去做,毕竟google这么去做事有他的优点的,前不久,我去网上下了一个应用,结果这个应用跑起来非常慢,我按返回按键没有反应,结果是我狂试了所有能按的按键和触摸屏,就是退不出来,唯一的办法就把手机的电池给拿掉,从新开机。在这里我非常希望大家不要去把原本好好的android系统给搞乱了。
那你说,我要解决问题怎么办,你又要我不要乱改系统原来的设计。我觉得办法很多,只要你想一定可以搞定的。 看看上面的代码,我还加了这个Boolean变量first_into = false; 用他也是可以解决问题的!


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI