由于工作需要,得需要自己去来实现一个锁屏的功能,所以借此机会也可以同步的记录下自己的学习知识。

关于锁屏

说到锁屏,我想大家应该都不是很陌生,每天和我们的手指多次的交互。我对Android锁屏的印象从最早的左滑开锁,右滑静音开始,一直到自己买到奶骑2之后那个圆形的解锁。见过MIUIV4中上下左右的,也用过Flyme2.0里3通道上滑。 为了比较简单的实现咋的需求,初步我还是通过以左滑解锁,右滑也解锁来进行自己的初步开发。

需求

对于需求来说,就是通过从中心点左右滑动时,若没有到达指定位置,用户松手,滑块还原。若达到指定位置以后,则触发相应的事件来执行后面的操作,在本文中,我就是为了触发finish();

实现

Layout布局

通过ScrollRelativeLayout继承RelativeLayout,为里面添加一个Scroller,来控制滚动。 详情可以见源码。

ScrollRelativeLayout

  • 申明一个Scroller对象,用来调用其computeScroll(),获取滚动情况,做出相应的响应。 @Override public void computeScroll() { if (mScroller.computeScrollOffset()) { scrollTo(mScroller.getCurrX(), 0); postInvalidate(); } }
  • 通过调用startScroll()传参实现用户松手的时候修正位置。
  • 返回当前的x坐标,getCurrX().

HomeActivity

在这个Activity中,需要对手指滑动事件进行捕捉,并且计算控制。
  • Override onTouch()方法,通过检测MotionEvent的不同条件(DOWN,UP,MOVE),来对用户触摸进行不同的处理
    • DOWN只需要getCurrX()
    • UP是主要实现功能的地方
      • 首先获取整个屏幕的宽度w,并且初始化x的值initX(注意:由于我的滑动是通过TextView控件实现的,因此在初始X坐标的时候需要考虑到控件的宽度)即initX = w / 2 - tvTouch.getWidth() / 2;
      • 确定左右边界rightLimt&leftLimt
      • 从控件的中心点算起,左边为正值,右边为负 if (scroller.getCurrX() < 0 && -scroller.getCurrX() > rightLimt) { scroller.autoScroll(scroller.getCurrX(), -scroller.getCurrX(),1500); onScrollOut(); finish(); } // to the left else if (scroller.getCurrX() > 0 && scroller.getCurrX() > leftLimt) { scroller.autoScroll(scroller.getCurrX(), -scroller.getCurrX(),1500); onScrollOut(); } else { // fix the distance scroller.autoScroll(scroller.getCurrX(), -scroller.getCurrX(), 1000); }
    • MOVE来实时的更新位置
  • 添加滑动完毕后事件onScrollOut()
通过上面这一段简单的代码就能实现出,我们所想要的效果。 想要看源码的,请点击这里. To Be Continue~
好久没有更新自己的Blog了,不知道是因为自己忙,还是没有什么想要写的。 这一个月经历了很多事情,也跑了好多地方,来到潍坊吃了一碗面,去了招远看到了KFC,去青岛再一次看到了栈桥,到上海当了一段时间YP。做了好多次的饭,喝了不少听青岛啤酒。 学会了如何去读书。看了《慢慢来,一切都来得及》(比较推荐,便宜内容很很丰富)、《人性的弱点》(不要被名字所欺骗,是一本非常好的书)、《如何提高情商》(情商才是这个世界的制胜法宝)、《一只特立独行的猪》(波哥的书,永远都是那么带感)。
  • 人是因为对一件事情干得越来越好才越来越有兴趣的,不是对什么感兴趣才干得好的。----《慢慢来,一切都来得及》
  • 我爱的人送我以伤口,伤口固然疼痛,但却不是身外之物,它长在身上,嵌进肉里;爱我的人送我以礼物,礼物固然美好,但却是身外之物,随时可以抛弃不要。我爱我的一切,包括爱我的痛苦。 ----《慢慢来,一切都来得及》
最后,最近ALS冰水活动特别的火爆,但现在也逐渐的变了味道,今天看到了知乎日报的一篇文章 看完才真正的了解这个病的可怕,脑袋清晰如常,但是身体已经无法动弹。很同情他们,也想为他们做点什么,若你能到我的Blog看到这条的消息,请再About页面中联系我,我会尽我所能去帮助你们编程,让你们更加高效的交流。 放上一个我在国内众多明星中,让我印象最深刻,且最真实的还原了这个活动本质的女神--桂纶镁