Android编程实现长按Button按钮连续响应功能示例

Android编程实现长按Button按钮连续响应功能示例,第1张

概述本文实例讲述了Android编程实现长按Button按钮连续响应功能。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID编程实现长按button按钮连续响应功能。分享给大家供大家参考,具体如下:

在电商类app的购物车页面,经常会有这样的需求:长按“+”按钮或者“-”按钮时,购物车中的商品数量连续的增加或减少。

本例的目的就是为了实现这个效果。预览图:

1.自定义button.

@H_404_13@
/** * 长按连续响应的button * Created by admin on 15-6-1. */public class LongClickbutton extends button {  /**   * 长按连续响应的监听,长按时将会多次调用该接口中的方法直到长按结束   */  private LongClickRepeatListener repeatListener;  /**   * 间隔时间(ms)   */  private long intervalTime;  private MyHandler handler;  public LongClickbutton(Context context) {    super(context);    init();  }  public LongClickbutton(Context context,AttributeSet attrs) {    super(context,attrs);    init();  }  public LongClickbutton(Context context,AttributeSet attrs,int defStyleAttr) {    super(context,attrs,defStyleAttr);    init();  }  /**   * 初始化监听   */  private voID init() {    handler = new MyHandler(this);    setonLongClickListener(new OnLongClickListener() {      @OverrIDe      public boolean onLongClick(VIEw v) {        new Thread(new LongClickThread()).start();        return true;      }    });  }  /**   * 长按时,该线程将会启动   */  private class LongClickThread implements Runnable {    private int num;    @OverrIDe    public voID run() {      while (LongClickbutton.this.ispressed()) {        num++;        if (num % 5 == 0) {          handler.sendEmptyMessage(1);        }        SystemClock.sleep(intervalTime / 5);      }    }  }  /**   * 通过handler,使监听的事件响应在主线程中进行   */  private static class MyHandler extends Handler {    private WeakReference<LongClickbutton> ref;    MyHandler(LongClickbutton button) {      ref = new WeakReference<>(button);    }    @OverrIDe    public voID handleMessage(Message msg) {      super.handleMessage(msg);      LongClickbutton button = ref.get();      if (button != null && button.repeatListener != null) {        button.repeatListener.repeatAction();      }    }  }  /**   * 设置长按连续响应的监听和间隔时间,长按时将会多次调用该接口中的方法直到长按结束   *   * @param Listener   监听   * @param intervalTime 间隔时间(ms)   */  public voID setLongClickRepeatListener(LongClickRepeatListener Listener,long intervalTime) {    this.repeatListener = Listener;    this.intervalTime = intervalTime;  }  /**   * 设置长按连续响应的监听(使用默认间隔时间100ms),长按时将会多次调用该接口中的方法直到长按结束   *   * @param Listener 监听   */  public voID setLongClickRepeatListener(LongClickRepeatListener Listener) {    setLongClickRepeatListener(Listener,100);  }  public interface LongClickRepeatListener {    voID repeatAction();  }}

2.在Activity中调用:

@H_404_13@
LongClickbutton buttonSub = (LongClickbutton) findVIEwByID(R.ID.long_click_button1);LongClickbutton buttonAdd = (LongClickbutton) findVIEwByID(R.ID.long_click_button2);final TextVIEw numberTV = (TextVIEw) findVIEwByID(R.ID.main_number);//连续减buttonSub.setLongClickRepeatListener(new LongClickbutton.LongClickRepeatListener() {  @OverrIDe  public voID repeatAction() {    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) - 1));  }},50);//连续加buttonAdd.setLongClickRepeatListener(new LongClickbutton.LongClickRepeatListener() {  @OverrIDe  public voID repeatAction() {    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) + 1));  }},50);//减1buttonSub.setonClickListener(new VIEw.OnClickListener() {  @OverrIDe  public voID onClick(VIEw v) {    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) - 1));  }});//加1buttonAdd.setonClickListener(new VIEw.OnClickListener() {  @OverrIDe  public voID onClick(VIEw v) {    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) + 1));  }});

3.很多时候,长按的事件和普通点击的事件是一样的(也就是说,长按相当于连续的快速点击)。这种情况下,自定义button可以更加简洁:即在长按时,连续的调用普通的OnClickListener。

@H_404_13@
public class LongClickbutton2 extends button {  /**   * 间隔时间(ms)   */  private long intervalTime = 50;  private MyHandler handler;  public LongClickbutton2(Context context) {    super(context);    init();  }  public LongClickbutton2(Context context,attrs);    init();  }  public LongClickbutton2(Context context,defStyleAttr);    init();  }  /**   * 初始化监听   */  private voID init() {    handler = new MyHandler(this);    setonLongClickListener(new OnLongClickListener() {      @OverrIDe      public boolean onLongClick(VIEw v) {        new Thread(new LongClickThread()).start();        return true;      }    });  }  /**   * 长按时,该线程将会启动   */  private class LongClickThread implements Runnable {    private int num;    @OverrIDe    public voID run() {      while (LongClickbutton2.this.ispressed()) {        num++;        if (num % 5 == 0) {          handler.sendEmptyMessage(1);        }        SystemClock.sleep(intervalTime / 5);      }    }  }  /**   * 通过handler,使监听的事件响应在主线程中进行   */  private static class MyHandler extends Handler {    private WeakReference<LongClickbutton2> ref;    MyHandler(LongClickbutton2 button) {      ref = new WeakReference<>(button);    }    @OverrIDe    public voID handleMessage(Message msg) {      super.handleMessage(msg);      LongClickbutton2 button = ref.get();      if (button != null) {        //直接调用普通点击事件        button.performClick();      }    }  }  public voID setIntervalTime(long intervalTime) {    this.intervalTime = intervalTime;  }}

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android布局layout技巧总结》、《Android视图View技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体 *** 作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android编程实现长按Button按钮连续响应功能示例全部内容,希望文章能够帮你解决Android编程实现长按Button按钮连续响应功能示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1147196.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存