本文实例为大家分享了Android实现掷骰子效果的具体代码,供大家参考,具体内容如下

利用handler接受子线程的消息完成骰子点数的不断更替

演示

START:开始游戏
STOP:停止游戏
RECOVER:重置色子到初始状态

代码

package com.example.homeworkten;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends AppCompatActivity { private ImageView imageView1,imageView2,imageView3; private Button button1,button2,button3; private ImageView[] imageViews; private Handler handler; //子线程 private Thread thread; //记录每个色子的点数 private int number[]; //色子的总点数 private int count; //volatile修饰符用来保证其它线程读取的总是该变量的最新的值 public volatile boolean isStop = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); number = new int[3]; imageView1 = findViewById(R.id.imageView1); imageView2 = findViewById(R.id.imageView2); imageView3 = findViewById(R.id.imageView3); button1 = findViewById(R.id.button1); button2 = findViewById(R.id.button2); button3 = findViewById(R.id.button3); imageViews = new ImageView[]{imageView1,imageView2,imageView3}; button1.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  //判断线程是否存在  if (thread != null&&isStop == true){   isStop = false;  }  handler = new Handler(){   @Override   public void handleMessage(@NonNull Message msg) {   super.handleMessage(msg);   for(int i = 0;i < 3;i++) {    switch (number[i]) {    case 1:     imageViews[i].setImageResource(R.drawable.t1);     break;    case 2:     imageViews[i].setImageResource(R.drawable.t2);     break;    case 3:     imageViews[i].setImageResource(R.drawable.t3);     break;    case 4:     imageViews[i].setImageResource(R.drawable.t4);     break;    case 5:     imageViews[i].setImageResource(R.drawable.t5);     break;    case 6:     imageViews[i].setImageResource(R.drawable.t6);     break;    }   }   }  };  thread = new Thread(new Runnable() {   @Override   public void run() {   while (!isStop) {    Message message = handler.obtainMessage();    //总点数归零    count = 0;    for (int i = 0; i < 3; i++) {    try {     Thread.sleep(50);    } catch (InterruptedException e) {     e.printStackTrace();    }    //生成随机数    int random = (int) (Math.random() * 6 + 1);    number[i] = random;    count += random;    }    handler.sendMessage(message);   }   }  });  thread.start();  } }); //停止掷筛子 button2.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  if(isStop == false) {   isStop = true;   try {   //当子线程执行完以后才继续执行主线程   thread.join();   } catch (InterruptedException e) {   e.printStackTrace();   }   //显示掷出的点数   Toast.makeText(MainActivity.this, "你掷的点数为" + count, Toast.LENGTH_SHORT).show();  }else {   Toast.makeText(MainActivity.this, "请点击开始键进行掷色子", Toast.LENGTH_SHORT).show();  }  } }); //将色子还原到初始状态 button3.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  if(isStop == true) {   for (int i = 0; i < 3; i++) {   imageViews[i].setImageResource(R.drawable.t1);   }  }else {   Toast.makeText(MainActivity.this, "请先停止游戏,再重新开始", Toast.LENGTH_SHORT).show();  }  } }); }}
<?xml version="1.0" encoding="utf-8"?>   

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. android 异步加载
  2. Mms模块ConversationList流程分析(1)
  3. Android(安卓)AppWidgetProvider使用简例
  4. Android(安卓)多线程保证操作同步(同步锁的俩种)
  5. android 面试
  6. Android中不能在子线程中更新View视图的原因
  7. android app 与电脑wifi通信(二)
  8. android下的异步任务
  9. Android中的Handler总结(转帖)

随机推荐

  1. 实战 Android中的UI过度绘制
  2. 控件的圆角
  3. 'setenv' was not declared in this scop
  4. Android P Camera2相机简单解析(一、openC
  5. Android 禁止输入emoji表情符号
  6. 130292015044 上官伟 第一章作业
  7. 利用productFlavors实现一套代码打包多版
  8. Android Studio升级3.5.0总结
  9. android的MultiAutoCompleteTextView、Au
  10. Android 监听开机广播启动服务 动态注册