清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
一般实现
我们知道,一般实现双击事件,可以通过new OnClickListener()监听点击事件,然后记录前后两次点击距离开机的时间,由时间差在一定范围实现,代码如下:
long firstClickTime = 0; @Override public void onClick(View view) { if(firstClickTime > 0){ long secondClickTime = SystemClock.uptimeMillis();//距离上次开机时间 long dtime = secondClickTime - firstClickTime; if(dtime > 500){ Toast.makeText(getApplicationContext(), "实现双击事件监听", 0).show(); } else{ firstClickTime = 0; } return ; } firstClickTime = SystemClock.uptimeMillis(); }
Google实现算法
看完上面实现,思路很简单,但是当要实现多次点击时,那上面的可能就代码量很大了,这里写下GoogleAPI提供的方法
//数组存储点击次数 long[] mHits = new long[2]; @Override public void onClick(View v) { //实现双击方法 //src 拷贝的源数组 //srcPos 从源数组的那个位置开始拷贝. //dst 目标数组 //dstPos 从目标数组的那个位子开始写数据 //length 拷贝的元素的个数 System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); //实现左移,然后最后一个位置更新距离开机的时间,如果最后一个时间和最开始时间小于500,即双击 mHits[mHits.length - 1] = SystemClock.uptimeMillis(); if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) { // 双击居中了。。。屏幕的一半和归属地的一半,更新窗口,保存lastX params.x = wm.getDefaultDisplay().getWidth()/2-view.getWidth()/2; wm.updateViewLayout(view, params); Editor editor = sp.edit(); editor.putInt("lastx", params.x); editor.commit(); } }