android利用handler實(shí)現(xiàn)打地鼠游戲
本文實(shí)例為大家分享了android利用handler實(shí)現(xiàn)打地鼠游戲的具體代碼,供大家參考,具體內(nèi)容如下
xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/main_imageview"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@mipmap/icon"
android:visibility="gone" />
<Button
android:id="@+id/main_button"
android:layout_width="90dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp"
android:text="開(kāi)始游戲" />
<TextView
android:id="@+id/main_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" />
</RelativeLayout>
java
package com.tcy.digettetest;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.ref.WeakReference;
import java.util.IllegalFormatCodePointException;
import java.util.Random;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnTouchListener {
public static final int CODE = 1001;
public static final int MAX_NUMBER = 10;
public static final int RANDOM_NUMBER = 500;
Button statrGameButton;
TextView resultTextView;
ImageView saratogaImage;
int[][] mPostion = new int[][]{
{342, 180}, {432, 880},
{521, 256}, {429, 780},
{456, 976}, {145, 665},
{123, 678}, {564, 567},
};
int mTotalCount;
int mSuccessCount;
SaratogaHandler mHandler = new SaratogaHandler(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setTitle("打加加");
}
private void initView() {
statrGameButton = findViewById(R.id.main_button);
resultTextView = findViewById(R.id.main_textview);
saratogaImage = findViewById(R.id.main_imageview);
statrGameButton.setOnClickListener(this);
saratogaImage.setOnTouchListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.main_button:
startGame();
break;
}
}
private void startGame() {
statrGameButton.setEnabled(false);
resultTextView.setText("開(kāi)始啦");
statrGameButton.setText("游戲中……");
//發(fā)送消息
next(0);
}
public void next(int delayTime) {
int position = new Random().nextInt(mPostion.length);
Message message = Message.obtain();
message.what = CODE;
message.arg1 = position;
mHandler.sendMessageDelayed(message, delayTime);
mTotalCount++;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
v.setVisibility(View.GONE);
mSuccessCount++;
resultTextView.setText("打到了" + mSuccessCount + "只,共" + MAX_NUMBER + "只.");
return false;
}
public static class SaratogaHandler extends Handler {
final WeakReference<MainActivity> weakReference;
public SaratogaHandler(MainActivity activity) {
this.weakReference = new WeakReference<>(activity);
}
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
MainActivity activity = weakReference.get();
switch (msg.what) {
case CODE:
if (activity.mTotalCount > MAX_NUMBER) {
activity.clear();
Toast.makeText(activity, "小加加打完了", Toast.LENGTH_SHORT).show();
return;
}
int position = msg.arg1;
activity.saratogaImage.setX(activity.mPostion[position][0]);
activity.saratogaImage.setY(activity.mPostion[position][1]);
activity.saratogaImage.setVisibility(View.VISIBLE);
int randomTime = new Random().nextInt(RANDOM_NUMBER) + RANDOM_NUMBER;
activity.next(randomTime);
break;
}
}
}
private void clear() {
mTotalCount = 0;
mSuccessCount = 0;
saratogaImage.setVisibility(View.GONE);
statrGameButton.setText("點(diǎn)擊開(kāi)始");
statrGameButton.setEnabled(true);
}
}


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android開(kāi)發(fā)中Google為什么不讓用Handler的runWithScissors()
- Android Handler,Message,MessageQueue,Loper源碼解析詳解
- Android Handle原理(Looper,Handler和Message)三者關(guān)系案例詳解
- Android Handler消息機(jī)制分析
- 詳解Android Handler的使用
- android利用handler實(shí)現(xiàn)倒計(jì)時(shí)功能
- Android Handler實(shí)現(xiàn)閃屏頁(yè)倒計(jì)時(shí)代碼
- 使用C++11實(shí)現(xiàn)Android系統(tǒng)的Handler機(jī)制
- Android Handler機(jī)制的工作原理詳析
- 詳解Android使用Handler造成內(nèi)存泄露的分析及解決方法
- 深入Android HandlerThread 使用及其源碼完全解析
- 掌握Android Handler消息機(jī)制核心代碼
相關(guān)文章
Android數(shù)據(jù)結(jié)構(gòu)優(yōu)化教程
這篇文章主要介紹了Android數(shù)據(jù)結(jié)構(gòu)優(yōu)化方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01
Android 多圖上傳后將圖片進(jìn)行九宮格展示的實(shí)例代碼
這篇文章主要介紹了Android 多圖上傳后將圖片進(jìn)行九宮格展示,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
實(shí)例解析Android系統(tǒng)中的ContentProvider組件用法
這篇文章主要介紹了Android系統(tǒng)中的ContentProvider組件用法,舉例講解了ContentProvider傳遞數(shù)據(jù)及監(jiān)聽(tīng)ContentProvider數(shù)據(jù)改變的方法,十分詳細(xì),需要的朋友可以參考下2016-04-04
Android Studio配置Kotlin開(kāi)發(fā)環(huán)境詳細(xì)步驟
這篇文章主要介紹了Android Studio配置Kotlin開(kāi)發(fā)環(huán)境詳細(xì)步驟的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android鍵盤輸入語(yǔ)言設(shè)置默認(rèn)打開(kāi)myanmar緬甸語(yǔ)的步驟
如何實(shí)現(xiàn)Android鍵盤輸入語(yǔ)言默認(rèn)打開(kāi)為myanmar緬甸語(yǔ),如果要設(shè)置某種語(yǔ)言在輸入法默認(rèn)打開(kāi)可按一下步驟添加文件,我這里已經(jīng)驗(yàn)證時(shí)OK的2013-06-06
Android AlertDialog自定義樣式實(shí)現(xiàn)代碼
這篇文章主要介紹了Android AlertDialog自定義樣式實(shí)現(xiàn)代碼的相關(guān)資料,這里提供了實(shí)例代碼,一個(gè)簡(jiǎn)單示例,需要的朋友可以參考下2016-12-12
Android 嵌套Fragment的使用實(shí)例代碼
本文主要介紹Android Fragment,在這里提供了實(shí)例代碼跟效果圖,希望能幫助有需要的小伙伴2016-07-07
android實(shí)現(xiàn)軟件自動(dòng)更新的步驟
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)軟件自動(dòng)更新的步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

