Android实例-手机安全卫士(四十四)-双击自定义Toast窗口居中显示

一、目标

  实现自定义的Toast显示框在来电显示时双击便可自动居中

二、代码实现

  1、在“显示地址”服务(ShowPhoneAddService)中定义一个long类型的数组成员变量(取名mHits),用于存储双击事件的时间间隔;

long类型的数组成员变量(mHits):

1 private long[] mHits = new long[2];
View Code

 

  2、通过View对象(view)的setOnClickListener(OnClickListener l)方法为其设置点击事件,参数OnClickListener l通过new实例化OnClickListener()接口对象,并实现其onClick(View v)方法,导包。在onClick(View v)方法中:

    (1)通过系统(System)的arraycopy(Object src, int srcPos, Object dst, int dstPos, int length)方法将数组(mHits)移位拷贝一次,参数src为被拷贝的资源,srcPos表示被拷贝资源的起始位置,dst表示粘贴到的目标资源,dstPos表示粘贴至目标资源的位置,length表示拷贝长度;

    (2)用于存储点击时间的数组最后一个数据通过系统时间对象SystemClock的uptimeMillis()方法获取当前时间至开始时间的毫秒值;

    (3)通过if语句判断当前开始时间(SystemClock.uptimeMillis())与数据第一个时间的差值是否小于500毫秒,如成立则在if语句中执行:

      ①将窗口对象(params)的x轴、Y轴坐标值分别设为屏幕宽度与Toast窗口宽度的一半的差值;

      ②通过窗口管理对象(wm)的updateViewLayout(View view, LayoutParams params)方法更新显示对象;

      ③通过SharedPreferences对象(sp)保存。

点击事件代码:

 1 view.setOnClickListener(new OnClickListener() {
 2             
 3             @Override
 4             public void onClick(View v) {
 5                 System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
 6                 mHits[mHits.length-1] = SystemClock.uptimeMillis();
 7                 if(SystemClock.uptimeMillis()-mHits[0]<=500){//双击时间间隔少于500毫秒
 8                     //Toast窗口居中显示,即屏幕宽度一半减去Toast窗口宽度一半
 9                     params.x = wm.getDefaultDisplay().getWidth()/2-view.getWidth()/2;
10                     params.y = wm.getDefaultDisplay().getHeight()/2-view.getHeight()/2;
11                     wm.updateViewLayout(view, params);//更新显示
12                     Editor editor = sp.edit();
13                     editor.putInt("ToastX", params.x);
14                     editor.putInt("ToastY", params.y);
15                     editor.commit();
16                 }
17             }
18         });
View Code

 

posted @ 2015-05-06 16:59  红烧大白鲨  阅读(351)  评论(0编辑  收藏  举报