android利用handler實現(xiàn)打地鼠游戲
本文實例為大家分享了android利用handler實現(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="開始游戲" />
<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("開始啦");
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("點擊開始");
statrGameButton.setEnabled(true);
}
}


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android開發(fā)中Google為什么不讓用Handler的runWithScissors()
- Android Handler,Message,MessageQueue,Loper源碼解析詳解
- Android Handle原理(Looper,Handler和Message)三者關(guān)系案例詳解
- Android Handler消息機制分析
- 詳解Android Handler的使用
- android利用handler實現(xiàn)倒計時功能
- Android Handler實現(xiàn)閃屏頁倒計時代碼
- 使用C++11實現(xiàn)Android系統(tǒng)的Handler機制
- Android Handler機制的工作原理詳析
- 詳解Android使用Handler造成內(nèi)存泄露的分析及解決方法
- 深入Android HandlerThread 使用及其源碼完全解析
- 掌握Android Handler消息機制核心代碼
相關(guān)文章
android實現(xiàn)圖片閃爍動畫效果的兩種實現(xiàn)方式(實用性高)
本文通過兩種方法給大家講解了android實現(xiàn)圖片閃爍動畫效果,實用性非常高,對這兩種方法感興趣的朋友一起通過本文學(xué)習(xí)吧2016-09-09
Android 中使用RecyclerView實現(xiàn)底部翻頁
這篇文章主要介紹了Android 中使用RecyclerView實現(xiàn)底部翻頁功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11
Android Studio去除界面默認(rèn)標(biāo)題欄的方法
這篇文章主要介紹了Android Studio去除界面默認(rèn)標(biāo)題欄的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2007-09-09
Android基于google Zxing實現(xiàn)二維碼的生成
這篇文章主要介紹了Android基于google Zxing實現(xiàn)二維碼的生成的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-06-06
Android studio 項目手動在本地磁盤中刪除module后,殘留文件夾無法刪除的問題解決方法
這篇文章主要介紹了Android studio 項目手動在本地磁盤中刪除module后,殘留文件夾無法刪除問題,本文給出了解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
淺談Android app開發(fā)中Fragment的Transaction操作
這篇文章主要介紹了Android app開發(fā)中Fragment的Transaction操作,包括Transaction和Fragment的生命周期的聯(lián)系等內(nèi)容,需要的朋友可以參考下2016-02-02

