亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android編程實(shí)現(xiàn)長按Button按鈕連續(xù)響應(yīng)功能示例

 更新時(shí)間:2017年01月21日 12:02:48   作者:books1958  
這篇文章主要介紹了Android編程實(shí)現(xiàn)長按Button按鈕連續(xù)響應(yīng)功能,涉及Android自定義按鈕及事件響應(yīng)操作相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了Android編程實(shí)現(xiàn)長按Button按鈕連續(xù)響應(yīng)功能。分享給大家供大家參考,具體如下:

在電商類app的購物車頁面,經(jīng)常會有這樣的需求:長按“+”按鈕或者“-”按鈕時(shí),購物車中的商品數(shù)量連續(xù)的增加或減少。

本例的目的就是為了實(shí)現(xiàn)這個(gè)效果。預(yù)覽圖:

1.自定義Button.

/**
 * 長按連續(xù)響應(yīng)的Button
 * Created by admin on 15-6-1.
 */
public class LongClickButton extends Button {
  /**
   * 長按連續(xù)響應(yīng)的監(jiān)聽,長按時(shí)將會多次調(diào)用該接口中的方法直到長按結(jié)束
   */
  private LongClickRepeatListener repeatListener;
  /**
   * 間隔時(shí)間(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();
  }
  /**
   * 初始化監(jiān)聽
   */
  private void init() {
    handler = new MyHandler(this);
    setOnLongClickListener(new OnLongClickListener() {
      @Override
      public boolean onLongClick(View v) {
        new Thread(new LongClickThread()).start();
        return true;
      }
    });
  }
  /**
   * 長按時(shí),該線程將會啟動
   */
  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,使監(jiān)聽的事件響應(yīng)在主線程中進(jìn)行
   */
  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();
      }
    }
  }
  /**
   * 設(shè)置長按連續(xù)響應(yīng)的監(jiān)聽和間隔時(shí)間,長按時(shí)將會多次調(diào)用該接口中的方法直到長按結(jié)束
   *
   * @param listener   監(jiān)聽
   * @param intervalTime 間隔時(shí)間(ms)
   */
  public void setLongClickRepeatListener(LongClickRepeatListener listener, long intervalTime) {
    this.repeatListener = listener;
    this.intervalTime = intervalTime;
  }
  /**
   * 設(shè)置長按連續(xù)響應(yīng)的監(jiān)聽(使用默認(rèn)間隔時(shí)間100ms),長按時(shí)將會多次調(diào)用該接口中的方法直到長按結(jié)束
   *
   * @param listener 監(jiān)聽
   */
  public void setLongClickRepeatListener(LongClickRepeatListener listener) {
    setLongClickRepeatListener(listener, 100);
  }
  public interface LongClickRepeatListener {
    void repeatAction();
  }
}

2.在Activity中調(diào)用:

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);
//連續(xù)減
buttonSub.setLongClickRepeatListener(new LongClickButton.LongClickRepeatListener() {
  @Override
  public void repeatAction() {
    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) - 1));
  }
}, 50);
//連續(xù)加
buttonAdd.setLongClickRepeatListener(new LongClickButton.LongClickRepeatListener() {
  @Override
  public void repeatAction() {
    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) + 1));
  }
}, 50);
//減1
buttonSub.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) - 1));
  }
});
//加1
buttonAdd.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    numberTV.setText(String.valueOf(Integer.parseInt(numberTV.getText().toString()) + 1));
  }
});

3.很多時(shí)候,長按的事件和普通點(diǎn)擊的事件是一樣的(也就是說,長按相當(dāng)于連續(xù)的快速點(diǎn)擊)。這種情況下,自定義Button可以更加簡潔:即在長按時(shí),連續(xù)的調(diào)用普通的OnClickListener。

public class LongClickButton2 extends Button {
  /**
   * 間隔時(shí)間(ms)
   */
  private long intervalTime = 50;
  private MyHandler handler;
  public LongClickButton2(Context context) {
    super(context);
    init();
  }
  public LongClickButton2(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
  }
  public LongClickButton2(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
  }
  /**
   * 初始化監(jiān)聽
   */
  private void init() {
    handler = new MyHandler(this);
    setOnLongClickListener(new OnLongClickListener() {
      @Override
      public boolean onLongClick(View v) {
        new Thread(new LongClickThread()).start();
        return true;
      }
    });
  }
  /**
   * 長按時(shí),該線程將會啟動
   */
  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,使監(jiān)聽的事件響應(yīng)在主線程中進(jìn)行
   */
  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) {
        //直接調(diào)用普通點(diǎn)擊事件
        button.performClick();
      }
    }
  }
  public void setIntervalTime(long intervalTime) {
    this.intervalTime = intervalTime;
  }
}

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android布局layout技巧總結(jié)》、《Android視圖View技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》及《Android控件用法總結(jié)

希望本文所述對大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android中關(guān)于定時(shí)任務(wù)實(shí)現(xiàn)關(guān)閉訂單問題

    Android中關(guān)于定時(shí)任務(wù)實(shí)現(xiàn)關(guān)閉訂單問題

    在電商、支付等領(lǐng)域,往往會有這樣的場景,用戶下單后放棄支付了,那這筆訂單會在指定的時(shí)間段后進(jìn)行關(guān)閉操作,細(xì)心的你一定發(fā)現(xiàn)了像某寶、某東都有這樣的邏輯,而且時(shí)間很準(zhǔn)確,誤差在1s內(nèi);那他們是怎么實(shí)現(xiàn)的呢?今天通過本文學(xué)習(xí)定時(shí)任務(wù)實(shí)現(xiàn)關(guān)閉訂單問題
    2022-05-05
  • Android基礎(chǔ)之startActivityForResult()的用法詳解

    Android基礎(chǔ)之startActivityForResult()的用法詳解

    這篇文章主要給大家介紹了Android中startActivityForResult()的用法,文中給出了詳細(xì)的介紹與示例代碼,相信對大家的理解和學(xué)習(xí)具有一定參考借鑒價(jià)值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • Android自定義實(shí)現(xiàn)BaseAdapter的普通實(shí)現(xiàn)

    Android自定義實(shí)現(xiàn)BaseAdapter的普通實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Android自定義實(shí)現(xiàn)BaseAdapter的普通實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android自定義ListView實(shí)現(xiàn)下拉刷新上拉加載更多

    Android自定義ListView實(shí)現(xiàn)下拉刷新上拉加載更多

    Listview現(xiàn)在用的很少了,基本都是使用Recycleview,但是不得不說Listview具有劃時(shí)代的意義,我們可以自己添加下拉刷新,上拉加載更多功能。本文就來利用自定義ListView實(shí)現(xiàn)下拉刷新上拉加載更多效果,需要的可以參考一下
    2022-10-10
  • 基于Android中獲取資源的id和url方法總結(jié)

    基于Android中獲取資源的id和url方法總結(jié)

    下面小編就為大家分享一篇基于Android中獲取資源的id和url方法總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Android Handler runWithScissors 梳理流程解析

    Android Handler runWithScissors 梳理流程解析

    這篇文章主要為大家介紹了Android Handler runWithScissors 梳理流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Android string.xml中的替換方法

    Android string.xml中的替換方法

    這篇文章主要介紹了Android string.xml中的替換方法,結(jié)合實(shí)例形式簡單分析了string.xml中變量替換的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • Android實(shí)現(xiàn)底部帶刻度的進(jìn)度條樣式

    Android實(shí)現(xiàn)底部帶刻度的進(jìn)度條樣式

    由于公司需要一個(gè)帶刻度的進(jìn)度條樣式,因?yàn)榭潭刃枰獎討B(tài)去改變,所以換背景圖片的方案肯定是不行的,唯一的辦法就是自己繪制一個(gè)進(jìn)度條,下面小編給大家?guī)砹薃ndroid實(shí)現(xiàn)底部帶刻度的進(jìn)度條樣式及實(shí)例代碼,需要的朋友參考下吧
    2019-10-10
  • Android中判斷網(wǎng)絡(luò)連接是否可用及監(jiān)控網(wǎng)絡(luò)狀態(tài)

    Android中判斷網(wǎng)絡(luò)連接是否可用及監(jiān)控網(wǎng)絡(luò)狀態(tài)

    獲取網(wǎng)絡(luò)信息需要在AndroidManifest.xml文件中加入相應(yīng)的權(quán)限,接下來詳細(xì)介紹Android中判斷網(wǎng)絡(luò)連接是否可用及監(jiān)控網(wǎng)絡(luò)狀態(tài),感興趣的朋友可以參考下
    2012-12-12
  • Android開發(fā)之AAR文件的生成與使用步驟

    Android開發(fā)之AAR文件的生成與使用步驟

    Android中的aar主要是針對于Android Library而言的,可以簡單的理解為是對Android Library的打包,這個(gè)包的格式為.aar,下面這篇文章主要給大家介紹了關(guān)于Android開發(fā)之AAR文件的生成與使用步驟的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評論