由于昨天只实现了简单的左右滑动,今天我们来扩充一下它。让它能上滑,并且可以弹出相应的Layout,该Layout中有常用的一些软件,如拨号、短信、计算器等等。 当然对于一个锁屏,没有时间和日期,肯定也是不行的,so let‘s do this。

上滑处理

布局

其实布局很简单,将昨天的布局文件,加入一个LinearLayout,然后用属性去控制其中的子控件。

实现上滑

  • 首先我们定义两个变量y1记录之前的位置,y2记录竖直方向上的位移变量。
  • 通过在MotionEvent.ACTION_DOWN中获得点击的时候的x坐标和y坐标
  • 在MotionEvent.ACTION_UP中处理这样的事件
    • 当y1和y2之间的差距大于50的时候,判断其为上滑(因为我的tv控件是64)
    • 设定一个全局的变量,来控制上滑后的布局展现
    • 用if-else控制该布局
if ((y1 - y2) > 50) {
                if (!visble) {
                    toolsLayout.setVisibility(v.VISIBLE);
                    visble = true;
                }
                else {
                    toolsLayout.setVisibility(v.GONE);
                    visble = false;
                }
            }

实现时间日期

这里面主要还是参照了SOF里面的众多大神的实现
  • 对于日期来说,比较简单,Android自带的有很多的方法能完成
java.text.DateFormat.getDateInstance().format(
                new Date());
  • 时间就稍显复杂一点,虽说有函数可以提获得当前的系统时间,但那并不是我所期望的。所以,我打算用一个线程实时的更新当前时间。
    • 创建一个timeThread类,在类中实现,每隔1s,给Handler发送一条消息
          public class timeThread extends Thread {
          @Override
          public void run() {
              do {
                  try {
                      Thread.sleep(1000);
                      Message msg = new Message();
                      msg.what = msgKey;
                      mHandler.sendMessage(msg);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              } while (true);
          }
      }
    
    • 通过mHandler来获得当前的时间,并格式化输出
          long systemTime = System.currentTimeMillis();
          CharSequence sysTimeStr = DateFormat.format("hh:mm:ss",systemTime);
          tvTime.setText(sysTimeStr);
    
这样今天我的需求就已经完成了 想要看源码的,请点击这里. To Be Continue~