看电影的时候,想必大家经常会在电影开场的时候看见一段故事梗概的介绍,其中有一种显示的效果是一个字一个字先后顺序出现在屏幕上的,并且每出现一个字,还有一个键盘打字的声音出现。这个在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; 用他也是可以解决问题的!


更多相关文章

  1. android线程 Handler Message Queue AsyncTask
  2. AsyncTask原理及不足
  3. android Server及IntentServer
  4. android线程 Handler Message Queue AsyncTask线程模型 线程交互
  5. Android(安卓)studio百度地图SDK开发 2020最新超详细的Android(
  6. android 设置Alpha值实现图片渐变效果
  7. [Android] 图像处理整合之处理ColorMatrix和Intend传递路径显示
  8. android fragment新手简单应用(实现界面之间的跳转)
  9. Android(安卓)自定义View金额、价格样式显示MoneyView

随机推荐

  1. 【Android应用实例之五】调节播放器音量
  2. Adapter 要从源头开始适配
  3. Android(安卓)开发自定义使用svg构造交互
  4. android 学习心得
  5. Android uses-permission 大全
  6. Android 透明背景的dialog
  7. 联系人数据库设计之AbstractContactsProv
  8. Android简单UI界面的XML实现
  9. android 4.0.3 dhcpcd使用方法
  10. LinearLayout(线性布局)