Android實(shí)現(xiàn)擲骰子效果
本文實(shí)例為大家分享了Android實(shí)現(xiàn)擲骰子效果的具體代碼,供大家參考,具體內(nèi)容如下
利用handler接受子線程的消息完成骰子點(diǎn)數(shù)的不斷更替
演示
START:開(kāi)始游戲
STOP:停止游戲
RECOVER:重置色子到初始狀態(tài)
代碼
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; //記錄每個(gè)色子的點(diǎn)數(shù) private int number[]; //色子的總點(diǎn)數(shù) private int count; //volatile修飾符用來(lái)保證其它線程讀取的總是該變量的最新的值 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(); //總點(diǎn)數(shù)歸零 count = 0; for (int i = 0; i < 3; i++) { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } //生成隨機(jī)數(shù) 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 { //當(dāng)子線程執(zhí)行完以后才繼續(xù)執(zhí)行主線程 thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } //顯示擲出的點(diǎn)數(shù) Toast.makeText(MainActivity.this, "你擲的點(diǎn)數(shù)為" + count, Toast.LENGTH_SHORT).show(); }else { Toast.makeText(MainActivity.this, "請(qǐng)點(diǎn)擊開(kāi)始鍵進(jìn)行擲色子", Toast.LENGTH_SHORT).show(); } } }); //將色子還原到初始狀態(tài) 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, "請(qǐng)先停止游戲,再重新開(kāi)始", Toast.LENGTH_SHORT).show(); } } }); } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ImageView android:id="@+id/imageView1" android:layout_width="100dp" android:layout_height="80dp" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" app:layout_constraintEnd_toStartOf="@+id/imageView2" app:layout_constraintHorizontal_bias="0.482" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/t1" /> <ImageView android:id="@+id/imageView2" android:layout_width="100dp" android:layout_height="80dp" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" app:layout_constraintEnd_toStartOf="@+id/imageView3" app:layout_constraintStart_toEndOf="@+id/imageView1" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/t1" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:text="start" app:layout_constraintEnd_toStartOf="@+id/button2" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imageView1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:text="stop" app:layout_constraintEnd_toStartOf="@+id/button3" app:layout_constraintStart_toEndOf="@+id/button1" app:layout_constraintTop_toBottomOf="@+id/imageView2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" android:text="recover" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/button2" app:layout_constraintTop_toBottomOf="@+id/imageView3" /> <ImageView android:id="@+id/imageView3" android:layout_width="100dp" android:layout_height="80dp" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:layout_marginEnd="10dp" android:layout_marginRight="10dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/imageView2" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/t1" /> </androidx.constraintlayout.widget.ConstraintLayout>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android開(kāi)發(fā)中的簡(jiǎn)單設(shè)置技巧集錦
這篇文章主要介紹了Android開(kāi)發(fā)中的簡(jiǎn)單設(shè)置技巧,較為詳細(xì)的匯總了Android針對(duì)壁紙、語(yǔ)言、音量、錄音等多種設(shè)置的方法,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2016-06-06Android實(shí)現(xiàn)帶動(dòng)畫效果的可點(diǎn)擊展開(kāi)TextView
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶動(dòng)畫效果的可點(diǎn)擊展開(kāi)TextView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android UI體驗(yàn)之全屏沉浸式透明狀態(tài)欄樣式
這篇文章主要介紹了Android UI體驗(yàn)之全屏沉浸式透明狀態(tài)欄效果的相關(guān)資料,需要的朋友可以參考下2017-01-01Android開(kāi)發(fā)中Signal背后的bug與解決
這篇文章主要為大家介紹了Android開(kāi)發(fā)中Signal背后的bug與解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Android WebView如何判定網(wǎng)頁(yè)加載的錯(cuò)誤
這篇文章主要介紹了Android WebView如何判定網(wǎng)頁(yè)加載的錯(cuò)誤,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04Android中使用orc實(shí)現(xiàn)文字識(shí)別實(shí)例
這篇文章主要介紹了Android中使用orc實(shí)現(xiàn)文字識(shí)別實(shí)例,詳細(xì)的介紹了orc的簡(jiǎn)介和用法,有興趣的可以了解一下2017-05-05