Android线程实例讲解
本文只是一个关于Android线程之间通信的例子,高手请自动略过。例子主要实现如下功能:进度条,音乐播放进度显示,图片的移动。
游戏部分源码:
LoadBar.java
- package com.dance.mrljdx;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.DisplayMetrics;
- import android.util.Log;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- public class LoadBar extends Activity {
- /** Called when the activity is first created. */
- TextView txview=null,txload=null;
- ProgressBar pBar=null;
- protected static final int stop=1;
- protected static final int start=2;
- int intCounter=1;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.loadbar);
- //DisplayMetrics 获取屏幕信息
- DisplayMetrics dm=new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
- int screenwith=dm.widthPixels;
- int screenheigh=dm.heightPixels;
- txview=(TextView)findViewById(R.id.textwh);
- txload=(TextView)findViewById(R.id.loadtext);
- pBar=(ProgressBar)findViewById(R.id.pb);
- txview.setText("屏幕宽度:"+screenwith+"\n屏幕长度:"+screenheigh); //通过线程来改变ProgressBar的值
- new Thread(new Runnable() {
- public void run()
- {
- for (int i = 0; i <=pBar.getMax(); i++)
- {
- try
- {
- Thread.sleep(100);
- iintCounter=i+1;
- if (i == pBar.getMax())
- {
- Message m = new Message();
- m.what=LoadBar.stop; //what是一个×××值
- LoadBar.this.myMessageHandler.sendMessage(m);
- //将处理信息发送给myMessageHandler处理
- break;
- }
- else
- {
- Message m = new Message();
- m.what=LoadBar.start;
- LoadBar.this.myMessageHandler.sendMessage(m);
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
- }).start();
- }
- //重构Handler方法
- Handler myMessageHandler = new Handler()
- {
- // @Override
- public void handleMessage(Message msg)
- {
- switch (msg.what)
- {
- //ProgressBar已经是对大值
- case LoadBar.stop:
- //设置Intent,跳转到其他Activity
- Intent mIntent=new Intent();
- mIntent.setClass(LoadBar.this, Menu.class);
- startActivity(mIntent);
- Log.d("Lua", "Main==class");
- Thread.currentThread().interrupt();
- finish();
- break;
- case LoadBar.start:
- if (!Thread.currentThread().isInterrupted())
- {
- // 改变ProgressBar的当前值
- pBar.setProgress(intCounter);
- // 设置标题栏中前景的一个进度条进度值
- Log.d("Lua", "LoadBar线程");
- txload.setText(" 加载中 "+intCounter+"%");
- }
- break;
- }
- super.handleMessage(msg);
- }
- };
- }
Game.java
- package com.dance.mrljdx;
- import android.app.Activity;
- import android.media.MediaPlayer;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.animation.Animation;
- import android.view.animation.AnimationUtils;
- import android.widget.ImageButton;
- import android.widget.ImageView;
- import android.widget.SeekBar;
- public class Game extends Activity {
- MediaPlayer mediaPlayer;
- ImageButton imgbt1,imgbt2,imgbt3,openbt;
- OnClickListener listener1=null;
- OnClickListener listener2=null;
- OnClickListener listener3=null;
- OnClickListener listener4=null;
- OnClickListener openlistener=null;
- SeekBar sBar;
- Animation myAnimation;
- ImageView img1;
- private static final int start=1;
- private static final int end=2;
- // int position=mediaPlayer.getCurrentPosition();
- int pb,i;
- double current;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.game);
- setListener();
- imgbt1=(ImageButton)findViewById(R.id.btleft);
- imgbt1.setOnClickListener(listener1);
- imgbt2=(ImageButton)findViewById(R.id.btright);
- imgbt2.setOnClickListener(listener2);
- imgbt3=(ImageButton)findViewById(R.id.btup);
- imgbt3.setOnClickListener(listener3);
- // openbt=(ImageButton)findViewById(R.id.btopen);
- sBar=(SeekBar)findViewById(R.id.seek);
- pb=sBar.getProgress();
- myAnimation= AnimationUtils.loadAnimation(this,R.anim.img);
- img1=(ImageView) this.findViewById(R.id.img1);
- }
- void setListener(){
- listener1=new OnClickListener() {
- public void onClick(View v) {
- initSound();
- }
- };
- listener2=new OnClickListener() {
- public void onClick(View v) {
- stopMusic();
- }
- };
- listener3=new OnClickListener() {
- public void onClick(View v) {
- img1.setVisibility(View.INVISIBLE);
- }
- };
- openlistener=new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- choosMusic();
- }
- };
- }
- //游戏音效
- void initSound(){
- mediaPlayer=MediaPlayer.create(this,R.raw.gf);
- if(!mediaPlayer.isPlaying()){
- mediaPlayer.start();//播放声音
- img1.setVisibility(View.VISIBLE);
- img1.startAnimation(myAnimation);
- }
- new Thread(new Runnable() {
- public void run() {
- // TODO Auto-generated method stub
- while(current<1){
- Message m=new Message();
- if(mediaPlayer.isPlaying()){
- current=(double)mediaPlayer.getCurrentPosition()/mediaPlayer.getDuration();
- // Log.d("Lua", "==当前音乐是否播放="+mediaPlayer.isPlaying());
- m.what=Game.start;
- Game.this.musicHandler.sendMessage(m);
- }else {
- Log.d("Lua", "当前音乐是否播放="+mediaPlayer.isPlaying());
- m.what=Game.end;
- Game.this.musicHandler.sendMessage(m);
- break;
- }
- }
- }
- }).start();
- }
- //停止播放音乐
- void stopMusic(){
- if(mediaPlayer.isPlaying()){
- mediaPlayer.stop();//暂停声音
- }
- this.finish();
- }
- //选择播放的音乐
- void choosMusic(){
- }
- Handler musicHandler = new Handler(){
- public void handleMessage(Message msg) {
- switch(msg.what)
- {
- case Game.start:
- if (!Thread.currentThread().isInterrupted())
- {
- int i=new Double(current*100).intValue();
- Log.d("Lua", "==当期音乐播放位置="+i);
- // 改变ProgressBar的当前值
- sBar.setProgress(i+1);
- }
- break;
- case Game.end:
- Log.d("Lua", "当前音乐是否播放="+mediaPlayer.isPlaying());
- Thread.currentThread().interrupt();
- break;
- }
- }
- };
- }
游戏截图:
转载于:https://blog.51cto.com/mrljdx/700090
Android线程实例讲解相关推荐
- APP开发流程实例讲解-儒释道网络电台八天开发全程-在Android Studio中完成界面设计
APP开发流程实例讲解-儒释道网络电台八天开发全程 功能和界面初步设定 APP开发流程实例讲解-儒释道网络电台八天开发全程 项目发起 功能和界面初步设定 在Android Studio中完成界面设计 ...
- python3线程gil_python3爬虫GIL修改多线程实例讲解
我们打开程序后,会发现电脑的内存和cpu发生了变化.在对于前者上面,自然是希望内容占用小,cpu的利用越高越好.那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的 ...
- Android 系统(207)---Android各种Drawable讲解和demo实例
Android各种Drawable讲解和demo实例 转载自 : https://blog.csdn.net/linghu_java/article/details/42119969 PS:文字内容 ...
- 守护线程和用户线程的真正区别(实例讲解)
java 中的线程分为两种:守护线程(Daemon)和用户线程(User). 用户线程:我们平时所创建的都是用户线程. 守护线程:为用户线程提供服务. 任何线程都可以设置为守护线程和用户线程,通过方法 ...
- Android input 系统InputReader,InputDispatcher线程实例--UI死掉
Android input 系统InputReader,InputDispatcher线程实例–UI死掉但touch 正常报点 依据 Android input 系统初始化和启动流程中的背景: 做An ...
- Android 驱动(8)---简单实例讲解linux的module模块编译步骤
简单实例讲解linux的module模块编译步骤 原博文地址http://blog.sina.com.cn/s/blog_4ba5b45e0102v25h.html ----------------- ...
- 如何撰写android课程设计ppt,课程设计实例讲解.ppt
长春理工大学光电工程学院;①研究相应系统检测的原理:通过查找资料,给出题目的研究意义,国内外的发展现状,并进行不同测量方法的对比与分析.②研究与此原理相应的总体方案并建立相应的数学模型:确定总体方案并 ...
- 断点续传的原理剖析与实例讲解
断点续传的原理剖析与实例讲解 本文所要讲的是Android断点续传的内容,以实例的形式进行了详细介绍. 一.断点续传的原理 其实断点续传的原理很简单,就是在http的请求上和一般的下载有所不同而已. ...
- android线程间通信的几种方法_Android线程间通信机制
讲解Handler机制的博文很多,我也看了很多,但说实话,在我对Handler几乎不怎么了解的情况下,每一篇文章我都没太看懂,看完之后脑子里还是充满了疑问.究其原因,是因为几乎每一篇文章一上来就开始深 ...
最新文章
- micropython串口通信_MicroPython-ESP32串口通信-1Z实验室
- Effective Java 读书笔记----第三章
- 定义一个列表存储n个整数,求列表的长度,最大值,最小值和平均值
- 八款开源Android游戏引擎
- java 23种设计模式及具体例子 收藏有时间慢慢看
- Java内存组成GC算法
- linux容器进程号,linux下docker启动容器,查看容器、进程、日志等命令
- [转]小程序web-view组件
- LVGL(2)Visual Studio模拟器使用
- Perl语言入门14-17
- java生成固定长度随机数
- 简单web服务器的实现(C++)
- win10 任务管理器显示GPU占用率
- macbookpro bootcamp win10 蓝牙鼠标卡顿解决方案
- 启动计算机需要配置,Win10 office2007每次启动都要配置的解决方案
- html css依赖管理,composer 管理js css等依赖文件【fxp/composer-asset-plugin】
- Mapper 与 Reducer 解析
- 第39级台阶 蓝桥杯
- Excel 如何引用某表格中的某一列作为数据有效性验证
- 苹果手机计算机桌面显示器,《iphone使用技巧》苹果电脑手机必学的几个投屏幕方法分享...
热门文章
- 重磅丨英伟达刚刚发布全球最大GPU:GTC2018黄仁勋演讲核心内容整理
- 免费教材丨第51期:数学基础课程----概率论教程、机器学习中的数学基础
- 谷歌机器智能大牛:AI模型要真正理解人类语言,关键是「序列学习」
- Facebook数字货币凸显硅谷雄心:打造全球金融操作系统
- DARPA“终身学习机器”项目取得重大进展
- 谷歌、苹果等大佬亲自戳穿自动驾驶完美童话,技术、场景、安全牢笼实难突围!...
- 【2018第五届世界互联网大会】世界互联网领先科技成果发布:带你看看这15项“黑科技”...
- 增长率高达40%!物联网平台如何拉动产业马车飞速狂奔
- 智能生产的现状与未来!
- 也谈压缩感知和贝叶斯大脑