[mobilesafe] 03_多次点击事件的实现

Android 4.0

多次点击

一、彩蛋1、快速点击3次

2、再次点击一下
二、查看系统如何实现多次点击
导入Settings


1、Android version

2、CTRL+H,搜Android version
3、搜索到的strings.xml

4、再次CTRL+H,搜fireware_version

5、源码多次点击实现
long[] mHits = new long[3]; 
...... 
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if (preference.getKey().equals(KEY_FIRMWARE_VERSION)) {
            System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
            mHits[mHits.length-1] = SystemClock.uptimeMillis();
            if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.setClassName("android",
                        com.android.internal.app.PlatLogoActivity.class.getName());
                try {
                    startActivity(intent);
                } catch (Exception e) {
                    Log.e(LOG_TAG"Unable to start activity " + intent.toString());
                }
            }
三、系统3击事件源码分析:
四、案例
package cn.zengfansheng.threeclick;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    // 1、存时间的数组
    long[] mHits = new long[3];
    public void threeClick(View view) {
        // 2、数组拷贝,将mHits的值位置1开始拷贝的mHits从0开始,拷贝mHits.length-1个
        // 那么最后一个位置留下了
        System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
        // 3、mHits最后一个位置赋值为当前系统时间
        mHits[mHits.length - 1] = SystemClock.uptimeMillis();
        //4、如果mHits第一个元素
        if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) {
            Toast.makeText(getApplicationContext(), mHits.length + "击事件~~~",0).show();
        }
    }
    /**
     * 我的四击事件
     * @param view
     */
    long[] myHits = new long[4];
    public void myFourClick(View view) {
        
        // 1、拷贝
        System.arraycopy(myHits, 1, mHits, 0, myHits.length - 1);
        // 2、赋值系统时间给最后一个元素
        myHits[myHits.length - 1] = SystemClock.currentThreadTimeMillis();
        // 判断
        if (myHits[0] >= (myHits[myHits.length - 1] - 600)) {
            Toast.makeText(getApplicationContext(), myHits.length + "击事件~~~", 0)
                    .show();
        }
    }
}