解决 Android 5.1 触摸屏上的多任务按键没有震动反馈的 bug

之前在没有遇到过这样的问题,网络上搜索也没有相关的解决方法。偶然的机会发现 framework 中的 PhoneWindowManager.java 会拦截相关的按键事件,研究之后,发现就是在这个文件中做按键的压感反馈。

解决方案如下:

  1. 平台 rk3368, Android5.1
  2. 解决方案:
    diff --git a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
    index d25051e..295ad5c 100755 (executable)
    --- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
    +++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
    @@ -5160,7 +5160,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     mKeyguardDelegate.isShowing()));
     
     //ADD BY LJH START
    - if (down && ((keyCode == KeyEvent.KEYCODE_HOME)||(keyCode == KeyEvent.KEYCODE_MENU)||(keyCode == KeyEvent.KEYCODE_BACK)))
    + if (down && ((keyCode == KeyEvent.KEYCODE_HOME)||(keyCode == KeyEvent.KEYCODE_MENU)||(keyCode == KeyEvent.KEYCODE_BACK) || (keyCode == KeyEvent.KEYCODE_APP_SWITCH)))
     {
     performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false);
     }
    

手写控件支持同步显示功能

手写控件支持同步显示功能,简单来说,就是 View1书写,然后另外一个 View2 用来同步显示。这个是继支持导入 SVG 数据后的又一个改进。

技术上都是没有什么难点,毕竟数据格式都是我自己定义的。同步数据支持同步整个 View 的笔迹,也支持增量添加笔迹。增量添加这个在实际应用场景应该会很受用,例如同步网络端传输过来的笔迹数据。

看效果图:
paint_sync

下一个目标应该是支持手写动作的回放了,加油。还有一个目标,就是笔迹粗细根据书写速度进行调整,估计这样的手写效果会更加漂亮。

手写控件:加权滑动平均值法滤波算法解决压力变化过大的问题

在手写控件适配到其他平板的时候,会发现每个平板的压力反馈值有不小的差异,这样会存在一种情况,在某些平板上,就是在收笔的时候压力突然变小后,就成前面一段粗,后面一段细,就像下图:
unnamed
这个时候,使用简单的滤波算法能简单的解决问题。

滑动平均值法:

滑动平均值法当前采样1次压力值,将本次采样值和以前的N-1次采样值一起求平均,得到当前的有效采样值。滑动平均值法把N个采样数据看成一个队列,对列的长度固定为N,每进行一次新的采样,把采样结果放入队尾,而扔掉原来队首的一个数据,这样在队列中始终有N个“最新”的数据。计算滤波值时,只要把队列中的N个数据进行平均,就可得到新的滤波值。

加权滑动平均值法:
上面提到的求平均值的算法,其实并不是很适合我们手写的场景,它更适合采样比较恒定的数据。所以我们需要对这个平均值算法做一些改善,不是求平均值,而是每个队列中的数值,分配一个权重,数值乘以权重,相加,得到最后的结果。

下面是一个最简单的例子,例子里面的队列只有两个数值,第一个数值的权重是 0.4,第二个数值的权重是 0.6,最后 pressure 就是平滑后的压力值。


float lastPressure = 0.0f;
float PRESSURE_FILTER_WEIGHT = 0.6f;
pressure = PRESSURE_FILTER_WEIGHT * realPressure
+ (1 - PRESSURE_FILTER_WEIGHT) * lastPressure;

lastPressure = pressure;

最后,通过调整权重,还可以动态调整最后的效果,以适应不同的平板硬件。

原笔迹手写控件支持保存为 svg 图片

最近研究了一下 svg 图片,可缩放矢量图片这个特性,也要在手写控件上支持。花费了不少精力,最终实现了这个功能。支持原笔迹,压感,笔锋,无失真缩放,这个特性,算是比较先进的了。后期对网络的支持更进一步。

看效果图(博客不支持显示 SVG,看一下谷歌浏览器的效果吧。):
paintview_svg

 

网站迁移到阿里云

website_index_page

之前博客放到亚马逊 aws,免费,稳定,而且不用备案,但是速度比较慢,登陆后台更不能忍。ssh 也经常连接不了。想想长期稳定的需要,还是需要把网站迁移回来。

之所以选择阿里云的 ecs,一是自己的知识积累,搭建自己的 vps 不再是难题,而且也可以顺便搭建私人的 git 代码管理平台,对以后的职业生涯发展还是挺有帮助的。

最令我意外的是,阿里云的备案系统做的很好,估计公关方面也下了不少功夫。我整个备案周期只花了5天。老实说,备案是我最不乐意去做的事情,但是在国内的空间就必须经历这个,幸好的是,对于个人网站,只要内容不违规,通过备案都是没有多大问题的。

然后就是博客数据的迁移,用 WordPress 自带的导入导出功能,很容易就实现了博客的数据迁移。然后再修改 apache 的配置,以支持 htaccess,这样就可以支持 wp super cache 插件了。wp super cache 在 aws 一直没有设置成功,原来是因为 htaccess 支持的问题,而且 aws ssh 实在龟速,所以当初也懒得折腾了。

接下来的还有一些 WordPress 的本地化的处理需求,例如禁止 Google font, avatar 头像本地化,你懂的。

职场的危机意识

借用一句名言,生活太安逸了,工作就会被生活所累。而我最近的感悟就是,工作压力令人太安逸了,工作也会被生活所累。这是我个人最近的切身体会。

因为工作团体比较小,大家比较熟悉,跟老大的关系也很融洽,本来这是好事。但是最近发现一些同事反而因为这样压力比较小,而出现一些懒散的消极心态。这些同事的消极心态不难理解,做的事情都是难度不高,有不少是重复性工作,团体的人员变动又比较少,久而久之,很容易令自己变得缺乏热情,懒散,消极。

这种情况,我认为员工的个人素养因素是首要因素。首先,个人如果有做适当的职业生涯规划,有明确的奋斗目标,例如要在公司内得到晋升,或者两年后跳槽,再或者技术上得到怎样的提升,等等。

再次,企业也应该可以做一下改善,例如更好的激励制度,工作量的量化,以及跟业绩挂钩的奖金制度;给员工有挑战性的项目,激发员工工作的热情;适当的员工交流等。

其实自己也有受工作环境负面因素的影响,希望自己能正视,有则改之,无则加勉,在职场上能获取到更好的发展。

Android开发必备站点:androiddevtools.cn

因为众所周知的技术原因,Android 相关的官方网站无法访问,造成 Android 开发相关的工具,官方文档都无法访问,特别是SDK,ADT无法更新。这里推荐一个新手老鸟都必备的网站: androiddevtools.cn

收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

欢迎大家推荐自己在Android开发过程中用的好用的工具、学习开发教程、用到设计素材,欢迎Star、Fork 。