• 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

  • 相关阅读:
    Java作业5.17
    上机作业5.14
    android 计算器
    安卓第四周作业
    课后作业
    5.28上机作业
    5.22作业
    5.21 作业
    5.20作业
    上机作业5.14
  • 原文地址:https://www.cnblogs.com/changyiqiang/p/12719494.html
Copyright © 2020-2023  润新知