本文只是一个关于Android线程之间通信的例子,高手请自动略过。例子主要实现如下功能:进度条,音乐播放进度显示,图片的移动。

游戏部分源码:

LoadBar.java

  1. package com.dance.mrljdx;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.util.DisplayMetrics;
  8. import android.util.Log;
  9. import android.widget.ProgressBar;
  10. import android.widget.TextView;
  11. public class LoadBar extends Activity {
  12. /** Called when the activity is first created. */
  13. TextView txview=null,txload=null;
  14. ProgressBar pBar=null;
  15. protected static final int stop=1;
  16. protected static final int start=2;
  17. int intCounter=1;
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.loadbar);
  22. //DisplayMetrics 获取屏幕信息
  23. DisplayMetrics dm=new DisplayMetrics();
  24. getWindowManager().getDefaultDisplay().getMetrics(dm);
  25. int screenwith=dm.widthPixels;
  26. int screenheigh=dm.heightPixels;
  27. txview=(TextView)findViewById(R.id.textwh);
  28. txload=(TextView)findViewById(R.id.loadtext);
  29. pBar=(ProgressBar)findViewById(R.id.pb);
  30. txview.setText("屏幕宽度:"+screenwith+"\n屏幕长度:"+screenheigh);        //通过线程来改变ProgressBar的值
  31. new Thread(new Runnable() {
  32. public void run()
  33. {
  34. for (int i = 0; i <=pBar.getMax(); i++)
  35. {
  36. try
  37. {
  38. Thread.sleep(100);
  39. iintCounter=i+1;
  40. if (i == pBar.getMax())
  41. {
  42. Message m = new Message();
  43. m.what=LoadBar.stop; //what是一个×××值
  44. LoadBar.this.myMessageHandler.sendMessage(m);
  45. //将处理信息发送给myMessageHandler处理
  46. break;
  47. }
  48. else
  49. {
  50. Message m = new Message();
  51. m.what=LoadBar.start;
  52. LoadBar.this.myMessageHandler.sendMessage(m);
  53. }
  54. }
  55. catch (Exception e)
  56. {
  57. e.printStackTrace();
  58. }
  59. }
  60. }
  61. }).start();
  62. }
  63. //重构Handler方法
  64. Handler myMessageHandler = new Handler()
  65. {
  66. // @Override
  67. public void handleMessage(Message msg)
  68. {
  69. switch (msg.what)
  70. {
  71. //ProgressBar已经是对大值
  72. case LoadBar.stop:
  73. //设置Intent,跳转到其他Activity
  74. Intent mIntent=new Intent();
  75. mIntent.setClass(LoadBar.this, Menu.class);
  76. startActivity(mIntent);
  77. Log.d("Lua", "Main==class");
  78. Thread.currentThread().interrupt();
  79. finish();
  80. break;
  81. case LoadBar.start:
  82. if (!Thread.currentThread().isInterrupted())
  83. {
  84. // 改变ProgressBar的当前值
  85. pBar.setProgress(intCounter);
  86. // 设置标题栏中前景的一个进度条进度值
  87. Log.d("Lua", "LoadBar线程");
  88. txload.setText("  加载中 "+intCounter+"%");
  89. }
  90. break;
  91. }
  92. super.handleMessage(msg);
  93. }
  94. };
  95. }

Game.java

  1. package com.dance.mrljdx;
  2. import android.app.Activity;
  3. import android.media.MediaPlayer;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.util.Log;
  8. import android.view.KeyEvent;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.animation.Animation;
  12. import android.view.animation.AnimationUtils;
  13. import android.widget.ImageButton;
  14. import android.widget.ImageView;
  15. import android.widget.SeekBar;
  16. public class Game extends Activity {
  17. MediaPlayer mediaPlayer;
  18. ImageButton imgbt1,imgbt2,imgbt3,openbt;
  19. OnClickListener listener1=null;
  20. OnClickListener listener2=null;
  21. OnClickListener listener3=null;
  22. OnClickListener listener4=null;
  23. OnClickListener openlistener=null;
  24. SeekBar sBar;
  25. Animation myAnimation;
  26. ImageView img1;
  27. private static final int start=1;
  28. private static final int end=2;
  29. //  int position=mediaPlayer.getCurrentPosition();
  30. int pb,i;
  31. double current;
  32. @Override
  33. public void onCreate(Bundle savedInstanceState) {
  34. super.onCreate(savedInstanceState);
  35. setContentView(R.layout.game);
  36. setListener();
  37. imgbt1=(ImageButton)findViewById(R.id.btleft);
  38. imgbt1.setOnClickListener(listener1);
  39. imgbt2=(ImageButton)findViewById(R.id.btright);
  40. imgbt2.setOnClickListener(listener2);
  41. imgbt3=(ImageButton)findViewById(R.id.btup);
  42. imgbt3.setOnClickListener(listener3);
  43. //        openbt=(ImageButton)findViewById(R.id.btopen);
  44. sBar=(SeekBar)findViewById(R.id.seek);
  45. pb=sBar.getProgress();
  46. myAnimation= AnimationUtils.loadAnimation(this,R.anim.img);
  47. img1=(ImageView) this.findViewById(R.id.img1);
  48. }
  49. void setListener(){
  50. listener1=new OnClickListener() {
  51. public void onClick(View v) {
  52. initSound();
  53. }
  54. };
  55. listener2=new OnClickListener() {
  56. public void onClick(View v) {
  57. stopMusic();
  58. }
  59. };
  60. listener3=new OnClickListener() {
  61. public void onClick(View v) {
  62. img1.setVisibility(View.INVISIBLE);
  63. }
  64. };
  65. openlistener=new OnClickListener() {
  66. public void onClick(View v) {
  67. // TODO Auto-generated method stub
  68. choosMusic();
  69. }
  70. };
  71. }
  72. //游戏音效
  73. void initSound(){
  74. mediaPlayer=MediaPlayer.create(this,R.raw.gf);
  75. if(!mediaPlayer.isPlaying()){
  76. mediaPlayer.start();//播放声音
  77. img1.setVisibility(View.VISIBLE);
  78. img1.startAnimation(myAnimation);
  79. }
  80. new Thread(new Runnable() {
  81. public void run() {
  82. // TODO Auto-generated method stub
  83. while(current<1){
  84. Message m=new Message();
  85. if(mediaPlayer.isPlaying()){
  86. current=(double)mediaPlayer.getCurrentPosition()/mediaPlayer.getDuration();
  87. //                      Log.d("Lua", "==当前音乐是否播放="+mediaPlayer.isPlaying());
  88. m.what=Game.start;
  89. Game.this.musicHandler.sendMessage(m);
  90. }else {
  91. Log.d("Lua", "当前音乐是否播放="+mediaPlayer.isPlaying());
  92. m.what=Game.end;
  93. Game.this.musicHandler.sendMessage(m);
  94. break;
  95. }
  96. }
  97. }
  98. }).start();
  99. }
  100. //停止播放音乐
  101. void stopMusic(){
  102. if(mediaPlayer.isPlaying()){
  103. mediaPlayer.stop();//暂停声音
  104. }
  105. this.finish();
  106. }
  107. //选择播放的音乐
  108. void choosMusic(){
  109. }
  110. Handler musicHandler = new Handler(){
  111. public void handleMessage(Message msg) {
  112. switch(msg.what)
  113. {
  114. case Game.start:
  115. if (!Thread.currentThread().isInterrupted())
  116. {
  117. int i=new Double(current*100).intValue();
  118. Log.d("Lua", "==当期音乐播放位置="+i);
  119. // 改变ProgressBar的当前值
  120. sBar.setProgress(i+1);
  121. }
  122. break;
  123. case Game.end:
  124. Log.d("Lua", "当前音乐是否播放="+mediaPlayer.isPlaying());
  125. Thread.currentThread().interrupt();
  126. break;
  127. }
  128. }
  129. };
  130. }

游戏截图:

转载于:https://blog.51cto.com/mrljdx/700090

Android线程实例讲解相关推荐

  1. APP开发流程实例讲解-儒释道网络电台八天开发全程-在Android Studio中完成界面设计

    APP开发流程实例讲解-儒释道网络电台八天开发全程 功能和界面初步设定 APP开发流程实例讲解-儒释道网络电台八天开发全程 项目发起 功能和界面初步设定 在Android Studio中完成界面设计 ...

  2. python3线程gil_python3爬虫GIL修改多线程实例讲解

    我们打开程序后,会发现电脑的内存和cpu发生了变化.在对于前者上面,自然是希望内容占用小,cpu的利用越高越好.那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的 ...

  3. Android 系统(207)---Android各种Drawable讲解和demo实例

    Android各种Drawable讲解和demo实例 转载自  : https://blog.csdn.net/linghu_java/article/details/42119969 PS:文字内容 ...

  4. 守护线程和用户线程的真正区别(实例讲解)

    java 中的线程分为两种:守护线程(Daemon)和用户线程(User). 用户线程:我们平时所创建的都是用户线程. 守护线程:为用户线程提供服务. 任何线程都可以设置为守护线程和用户线程,通过方法 ...

  5. Android input 系统InputReader,InputDispatcher线程实例--UI死掉

    Android input 系统InputReader,InputDispatcher线程实例–UI死掉但touch 正常报点 依据 Android input 系统初始化和启动流程中的背景: 做An ...

  6. Android 驱动(8)---简单实例讲解linux的module模块编译步骤

    简单实例讲解linux的module模块编译步骤 原博文地址http://blog.sina.com.cn/s/blog_4ba5b45e0102v25h.html ----------------- ...

  7. 如何撰写android课程设计ppt,课程设计实例讲解.ppt

    长春理工大学光电工程学院;①研究相应系统检测的原理:通过查找资料,给出题目的研究意义,国内外的发展现状,并进行不同测量方法的对比与分析.②研究与此原理相应的总体方案并建立相应的数学模型:确定总体方案并 ...

  8. 断点续传的原理剖析与实例讲解

    断点续传的原理剖析与实例讲解 本文所要讲的是Android断点续传的内容,以实例的形式进行了详细介绍. 一.断点续传的原理 其实断点续传的原理很简单,就是在http的请求上和一般的下载有所不同而已. ...

  9. android线程间通信的几种方法_Android线程间通信机制

    讲解Handler机制的博文很多,我也看了很多,但说实话,在我对Handler几乎不怎么了解的情况下,每一篇文章我都没太看懂,看完之后脑子里还是充满了疑问.究其原因,是因为几乎每一篇文章一上来就开始深 ...

最新文章

  1. micropython串口通信_MicroPython-ESP32串口通信-1Z实验室
  2. Effective Java 读书笔记----第三章
  3. 定义一个列表存储n个整数,求列表的长度,最大值,最小值和平均值
  4. 八款开源Android游戏引擎
  5. java 23种设计模式及具体例子 收藏有时间慢慢看
  6. Java内存组成GC算法
  7. linux容器进程号,linux下docker启动容器,查看容器、进程、日志等命令
  8. [转]小程序web-view组件
  9. LVGL(2)Visual Studio模拟器使用
  10. Perl语言入门14-17
  11. java生成固定长度随机数
  12. 简单web服务器的实现(C++)
  13. win10 任务管理器显示GPU占用率
  14. macbookpro bootcamp win10 蓝牙鼠标卡顿解决方案
  15. 启动计算机需要配置,Win10 office2007每次启动都要配置的解决方案
  16. html css依赖管理,composer 管理js css等依赖文件【fxp/composer-asset-plugin】
  17. Mapper 与 Reducer 解析
  18. 第39级台阶 蓝桥杯
  19. Excel 如何引用某表格中的某一列作为数据有效性验证
  20. 苹果手机计算机桌面显示器,《iphone使用技巧》苹果电脑手机必学的几个投屏幕方法分享...

热门文章

  1. 重磅丨英伟达刚刚发布全球最大GPU:GTC2018黄仁勋演讲核心内容整理
  2. 免费教材丨第51期:数学基础课程----概率论教程、机器学习中的数学基础
  3. 谷歌机器智能大牛:AI模型要真正理解人类语言,关键是「序列学习」
  4. Facebook数字货币凸显硅谷雄心:打造全球金融操作系统
  5. DARPA“终身学习机器”项目取得重大进展
  6. 谷歌、苹果等大佬亲自戳穿自动驾驶完美童话,技术、场景、安全牢笼实难突围!...
  7. 【2018第五届世界互联网大会】世界互联网领先科技成果发布:带你看看这15项“黑科技”...
  8. 增长率高达40%!物联网平台如何拉动产业马车飞速狂奔
  9. 智能生产的现状与未来!
  10. 也谈压缩感知和贝叶斯大脑