Android 記錄控件連續點擊次數


   對於單擊和連擊 ,最基本的區別就是“單擊是每次點擊的時間間隔超過連擊的有效范圍,而連擊是每次點擊的時間間隔都在連擊的有效范圍內”。(PS:個人觀點,有不妥的歡迎指正)

    所以要想判斷是否是連擊,就得定義一個連擊的有效范圍 interval(一個長整型變量)

private long interval = 500;

在每次點擊的時候判斷與上一次點擊的時間間隔是否符合 interval(即時間間隔小於或等於interval),不符合的,可能是連擊的開始,

也可能僅僅是單擊,所以我們的連擊計數器 count (一個整型變量)的值是 1,如果符合的話,就累加 count

@Override
    public void onClick(View v) {
        long secondTime = System.currentTimeMillis();
        // 判斷每次點擊的事件間隔是否符合連擊的有效范圍
        // 不符合時,有可能是連擊的開始,否則就僅僅是單擊
        if (secondTime - firstTime <= interval) {
            ++count;
        } else {
            count = 1;
        }
        // 延遲,用於判斷用戶的點擊操作是否結束
        delay();
        firstTime = secondTime;
    }

為了判斷用戶是否點擊完畢,每次點擊后,都會重置一個延時時鍾,當用戶結束點擊事件后,該延時時鍾就會如願的運行起來,

// 延遲時間是連擊的時間間隔有效范圍
    private void delay() {
        if (task != null)
            task.cancel();
 
        task = new TimerTask() {
            @Override
            public void run() {
                Message message = new Message();
                // message.what = 0;
                handler.sendMessage(message);
            }
        };
        delayTimer = new Timer();
        delayTimer.schedule(task, interval);
    }

並調用我們定義的點擊事件處理函數。

// 點擊事件結束后的事件處理
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (count == 1) {
                    tvCount.setText("單擊事件");
                } else if (count > 1) {
                    tvCount.setText("連續點擊事件,共點擊了 " + count + " 次");
                }
                delayTimer.cancel();
                count = 0;
                super.handleMessage(msg);
            }
        };

因為在這里講的是一個記錄連擊次數的,所以就只顯示是單擊還是連擊及連擊次數。

完整的類代碼<MainActivity.java>如下:

package com.chuanye.lianjidemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btClick = null;
    private TextView tvCount = null;
    private int count = 0;
    private long firstTime = 0;
    private Timer delayTimer;
    private Handler handler;
    private TimerTask task;
    private long interval = 500;
    private Button btClick11;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btClick = (Button) findViewById(R.id.btClick);
        btClick.setOnClickListener(this);
        tvCount = (TextView) findViewById(R.id.tvCount);

// 點擊事件結束后的事件處理 handler = new Handler() { @Override public void handleMessage(Message msg) { if (count == 1) { tvCount.setText("單擊事件"); } else if (count > 1) { tvCount.setText("連續點擊事件,共點擊了 " + count + " 次"); } delayTimer.cancel(); count = 0; super.handleMessage(msg); } }; } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btClick11: continuousClick(COUNTS, DURATION); break; case R.id.btClick: long secondTime = System.currentTimeMillis(); // 判斷每次點擊的事件間隔是否符合連擊的有效范圍 // 不符合時,有可能是連擊的開始,否則就僅僅是單擊 if (secondTime - firstTime <= interval) { ++count; } else { count = 1; } // 延遲,用於判斷用戶的點擊操作是否結束 delay(); firstTime = secondTime; break; } } // 延遲時間是連擊的時間間隔有效范圍 private void delay() { if (task != null) task.cancel(); task = new TimerTask() { @Override public void run() { Message message = new Message(); // message.what = 0; handler.sendMessage(message); } }; delayTimer = new Timer(); delayTimer.schedule(task, interval); } }

布局文件<activity_main.xml>如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">



    <TextView
        android:id="@+id/tvCount"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center"/>

    <Button
        android:id="@+id/btClick"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:layout_marginTop="60dp"
        android:layout_gravity="center"
        android:text="點擊" />



</LinearLayout>

結束

參考於:https://blog.csdn.net/weixin_33812433/article/details/91877542

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM