• Android 按钮长按下去重复执行某个动作,放开后停止执行动作


      Android开发中,常遇到一种需求,即按钮长按下去重复执行某个动作,放开后停止执行动作。网上找了许多代码,都没有适合的,于是自己动手写了一个。

      基本思路是:首先设置一个标识变量,用于标识是否处于按下的状态。当按钮按下的时候,将标识变量设置为true,启动一个线程用于重复执行某个动作(当标识变量为true时,循环执行动作,当为false跳出循环,结束动作);当按钮弹起来的时候,将标识变量设置为false。

      1、首先,设置标识变量

    1 private boolean booleanConnect = false;
    2 private Button rightSend;

      2、然后,初始化变量

    protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
     
             rightSend = (Button)findViewById(R.id.BtnRight);
     
             longPress = false;
    
             rightSend.setOnTouchListener(new View.OnTouchListener() {
    
                                  @Override
                                  public boolean onTouch(View v, MotionEvent event) {
                                          String str = "OND
    ";
                                          String strSendData = new String(str);
                                          LongTouchSendCmd(MainActivity.this, strSendData, event);
                                          return true;
                                  }
                              }
                         );
    }

      2、接着,实现按钮按下的重复执行动作  

     private void LongTouchSendCmd(final Activity activity, final String cmd, MotionEvent event){
            if (booleanConnect == false) {
                Toast.makeText(activity, "请先连接设备", Toast.LENGTH_SHORT).show();
                return;
            }
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    longPress = true;
                    Toast.makeText(activity, "开始发送", Toast.LENGTH_SHORT).show();
                    longPressSendCmdThread = new Thread() {
                        public void run() {
                            super.run();
                            while (true) {
                                if (longPress == true)//长按连续发送命令
                                {
                                    try {
                           //todo some action 在这里添加代码,执行某个动作 //String strSendData
    = cmd; //connectedThread.write(strSendData.getBytes());//接收数据 Thread.sleep(1000);//1秒发送一次 } catch (InterruptedException e) { e.printStackTrace(); } }else { break;//没有按下,退出循环 } } } }; longPressSendCmdThread.start(); break; } case MotionEvent.ACTION_UP:{ longPress = false; Toast.makeText(activity, "结束发送", Toast.LENGTH_SHORT).show(); } } }

      执行的结果:

      

  • 相关阅读:
    centos 远程授权
    jar 包启动脚本
    Java 优化要点
    Java 性能优化
    maven快速自动更新子模块项目的版本号
    spring boot Tomcat文件上传找不到零时文件夹
    redis 集群常用命令
    java基础知识点学习
    Markdown 语法
    elasticsearch
  • 原文地址:https://www.cnblogs.com/cv-pr/p/4764879.html
Copyright © 2020-2023  润新知