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