点击事件

Posted by catface on January 11, 2016

PART A_ Android 点击事件的四种实现

    1. 当前类实现 View.onClickListener 接口,覆写接口下的 onClick() 方法
    2. 在 onCreate() 中对指定控件设置点击监听并传入参数 this
    3. 在 onCLick() 中使用 switch-case 语句来对相应控件实现点击事件的具体逻辑

       public class ClickActivity extends AppCompatActivity implements View.OnClickListener {
      		
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_click);
      		
               findViewById(R.id.bt_click_event).setOnClickListener(this);
           }
      		
           @Override
           public void onClick(View v) {
               switch (v.getId()) {
                   case R.id.bt_click_event:
                       Toast.makeText(this, "点击事件的实现", Toast.LENGTH_SHORT).show();
                       break;
               }
           }
       }
      
    1. 在 onCreate() 中对控件设置点击监听并传入一个 View.onClickListener 实例
      PS(本篇为方便使用匿名内部类,也可以自定义类继承 onClickListener,覆写 onClick() 方法)
    2. 在 onCLick() 中使用 switch-case 语句来对相应控件实现点击事件的具体逻辑

       public class ClickActivity extends AppCompatActivity {
      		
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_click);
      		
               findViewById(R.id.bt_click_event).setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       switch (v.getId()) {
                           case R.id.bt_click_event:
                               Toast.makeText(getApplicationContext(), "点击事件的实现", Toast.LENGTH_SHORT).show();
                               break;
                       }
                   }
               });
           }
       }
      
  • 1.在布局文件中对控件设置 onClick 属性android:onClick="clickEvent"

      <Button
              android:id="@+id/bt_click_event"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="clickEvent"
              android:text="点击事件"
              android:textSize="22sp" />
    

    2.在Activity中实现public void clickEvent (View v)方法

    • 注意:必须声明为public,返回类型固定void,必须传入View实例(组件触发对象)

        public class ClickActivity extends AppCompatActivity {
      		
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_click);
            }
      		
            public void clickEvent(View v) {
                Toast.makeText(this, "点击事件的实现", Toast.LENGTH_SHORT).show();
            }
        }
      
  • 四、利用 IOC 注解(本篇使用 ButterKnife)

      public class ClickActivity extends AppCompatActivity {
    	
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_click);
              ButterKnife.bind(this);
          }
    	
          // 使用@onClick注解(可以省略方法声明public、传入的View组件对象)
          @OnClick(R.id.bt_click_event) void clickEvent() {
              Toast.makeText(this, "点击事件的实现", Toast.LENGTH_SHORT).show();
          }
      }
    

PART B_ 多击事件

  • 普通双击事件(不建议使用)

      long firstClickTime = 0;
    	
      public void clicks(int intervalTime){ // 最长间隔时间			
          if(firstClickTime > 0){
              if(System.currentTimeMillis() - firstClickTime < intervalTime){
                  System.out.println("双击事件");
                  firstClickTime = 0; // 将第一次点击时间置为0
              }
          }
    			
          firstClickTime = System.currentTimeMillis();
      }
    
  • 标准双击、多击事件(推荐使用)

      <pre class="prettyprint">long[] mArrs = new long[3];
    	
      public void clicks(long intervalTime, int clickTimes) {
          //src    源数组
          //srcPos 源数组的开始拷贝位置
          //dst    目标数组
          //dstPos 目标数组的开始拷贝位置
          //length 数组的拷贝长度
          System.arraycopy(mArrs, 1, mArrs, 0, mArrs.length - 1); //拷贝数组
          mArrs[mArrs.length - 1] = SystemClock.uptimeMillis();
          if (mArrs[0] >= (SystemClock.uptimeMillis() - intervalTime)) {
              Log.d("clickEvent", "clickTimes次点击事件");
              mArrs = new long[clickTimes];
          }
      }</pre>
    

		long[] mArrs = new long[3];

public void clicks(long intervalTime, int clickTimes) {
	//src    源数组
	//srcPos 源数组的开始拷贝位置
	//dst    目标数组
	//dstPos 目标数组的开始拷贝位置
	//length 数组的拷贝长度
	System.arraycopy(mArrs, 1, mArrs, 0, mArrs.length - 1); //拷贝数组
	mArrs[mArrs.length - 1] = SystemClock.uptimeMillis();
	if (mArrs[0] >= (SystemClock.uptimeMillis() - intervalTime)) {
		Log.d("clickEvent", "clickTimes次点击事件");
		mArrs = new long[clickTimes];
	}
}