Handler实例之打地鼠小游戏

Step 1 创建布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DiglettActivity">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/diglett"
        android:id="@+id/image_diglett"
        android:visibility="gone"
        />

     <Button
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:layout_centerHorizontal="true"
         android:id="@+id/start_diglett_btn"
         android:text="@string/start_game"
         />
    <TextView
        android:id="@+id/result_diglett_txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:layout_centerHorizontal="true"
        android:layout_centerInParent="true"
       />
</RelativeLayout>
Step 2 初始化控件及准备数据
private TextView mResultTextView;
private ImageView mDiglettImageView;
private Button mStartButton;

public int[][] mPosition = new int[][]{
        {342, 180},{432, 880},
        {521, 256},{429, 780},
        {456, 976},{145, 665},
        {123, 678},{564, 567},
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_diglett);

    findViews();
    setListeners();

}

private void setListeners() {
    mStartButton.setOnClickListener(this);
}

private void findViews() {

    mDiglettImageView=findViewById(R.id.image_diglett);
    mStartButton = findViewById(R.id.start_diglett_btn);;
    mResultTextView = findViewById(R.id.result_diglett_txt);
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.start_diglett_btn:
            //开始游戏的操作
            start()
            ...
            break;
    }
}
Step 3 新建一个Handler类
//新建一个Handler类
public  static  class  DiglettHandler extends Handler {

    public  final WeakReference<DiglettActivity> diglettActivityWeakReference;

    public DiglettHandler(DiglettActivity activity) {
        this.diglettActivityWeakReference = new WeakReference<>(activity);
    }

    @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        //获取DiglettActivity
        DiglettActivity activity = diglettActivityWeakReference.get();
        //处理数据
        ...
    }
}
Step 4 开始游戏的操作
private void start() {
    
    mStartButton.setText("游戏中");
    mStartButton.setEnabled(false);
    mResultTextView.setText("开始啦");
    next(500);
}

private void next(int delayTime) {

    int  position = new Random().nextInt(mPosition.length);
    Message message = Message.obtain();
    message.what = CODE;
    message.arg1 = position;
    handler.sendMessageDelayed(message,delayTime);
    //每打一个地鼠  增加1
    mTotalCount++;

}
Step 5 handler处理数据
//处理数据
switch (msg.what){
    case CODE:
        if(activity.mTotalCount>MAX_COUNT){
            activity.clear();
            Toast.makeText(activity,"地鼠打完了!",Toast.LENGTH_SHORT).show();
            break;
        }
        int position = msg.arg1;
        activity.mDiglettImageView.setX(activity.mPosition[position][0]);
        activity.mDiglettImageView.setX(activity.mPosition[position][1]);
        activity.mDiglettImageView.setVisibility(View.VISIBLE);
        int random = new Random().nextInt(RANDOM_NUMBER)+activity.RANDOM_NUMBER;
        activity.next(random);
        break;
}

 
Step 6 处理打地鼠的操作

实现OnTouchListener接口

public class DiglettActivity extends AppCompatActivity implements View.OnClickListener,View.OnTouchListener {
...


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.setVisibility(View.GONE);
        mSuccessCount++;
        mResultTextView.setText("打到了:"+mSuccessCount+"只,共"+MAX_COUNT+"只。");
        return false;
    }

//清空操作
 private void clear() {
        mTotalCount = 0;
        mSuccessCount = 0;
        mDiglettImageView.setVisibility(View.GONE);
        mStartButton.setText("点击开始");
        mStartButton.setEnabled(true);

    }
}

运行效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值