移动周分享-第42期

软件推荐 suger & nvalt - 曾铭

surge

iOS 正常上网神器,68元,目前已下架

衍生品 Replica - Web Developer Tool

iOS 网络调试神器,iOS 设备中代理所有网络流量,方便查看所有网络请求。68 元,Surge 用户直接解锁。

nvalt

『惊的速记』,最快速的笔记方式,本地纯文本存储,优秀的快捷键配置,支持 tag, markdown, 预览等。开源。

Android 微信抢红包 - 吴明

  • 主要原理:监听微信APP,如果发送[微信红包]相关通知,则通过Android辅助类服务AccessibilityService实现抢红包点击一系列动作

  • 通过AccessibilityService服务监听微信

  • 主要监听配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
监听动作类型
android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeViewScrolled"
完成反馈动作类型
android:accessibilityFeedbackType="feedbackGeneric"
标识
android:accessibilityFlags=""
是否可以屏幕内容
android:canRetrieveWindowContent="true"
服务描述
android:description="@string/server_description"
通知反应时间
android:notificationTimeout="0"
监听应用包名
android:packageNames="com.tencent.mm"
  • AccessibilityService实现方法:
    • onAccessibilityEvent()时间监听回调方法
    • onServiceConnected启动服务
    • onUnbind服务器解绑
    • onInterrupt中断服务
  • 事件

    • AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:通知消息事件
    • AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:屏幕window变化时间
    • AccessibilityEvent.TYPE_VIEW_SCROLLED屏幕滚动监听事件
  • 1.微信后台抢红包:

    • 后台TYPE_NOTIFICATION_STATE_CHANGED事件监听有[微信红包]通知则点击通知,TYPE_WINDOW_STATE_CHANGED事件点击‘抢红包’,TYPE_WINDOW_STATE_CHANGED点击‘拆红包’,TYPE_WINDOW_STATE_CHANGED跳转红包查看详情
  • 2.微信当前聊天页面抢红包
    • 当前聊天页面,不能接受通知
    • AccessibilityEvent.TYPE_VIEW_SCROLLED监听屏幕view有新消息,则查看屏幕是否有’抢红包’view,有则点击‘抢红包’view,点击抢红包后则同上通过TYPE_WINDOW_STATE_CHANGED事件完成抢红包一系列动作
  • 代码地址

Android Ripple - 王进

ripple

使用效果如下:

B1是不设任何背景的按钮

B2设置了?android:attr/selectableItemBackground

B3设置了?android:attr/selectableItemBackgroundBorderless

设置波纹颜色:

android:colorControlHighlight:设置波纹颜色
android:colorAccent:设置checkbox等控件的选中颜色
ripple xml 中设置color 属性

设置自定义RippleDrawable

1
2
<!-- An unbounded red ripple. --/> 
<ripple android:color="#ffff0000" />

也可以更改主题的波纹样式

1
2
<item name="android:selectableItemBackground">@drawable/selectable_item_stroke_bg</item>
<item name="android:selectableItemBackgroundBorderless">@drawable/selectable_item_bg</item>

更改主题波纹颜色
android:colorControlHighlight:设置波纹颜色

更改样式波纹后,会对app系统内置具有波纹效果app造成影响,NavigationView,Toolbar 上Menu 等,特别是波纹的背景色

因为波纹是在background属性上设置的,所以如果控件需要其他背景要素,可以在ripple的默认 上设置

5.0 兼容

兼容方法有二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/common_action_button_h" />
<stroke android:width="1dp" android:color="@color/colorAccent" />
<size android:height="@dimen/common_action_button_h" />
<solid android:color="#E5E5E5" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/common_action_button_h" />
<stroke android:width="1dp" android:color="@color/colorAccent" />
<size android:height="@dimen/common_action_button_h" />
<solid android:color="#E5E5E5" />
</shape>
</item>
<item android:drawable="@drawable/shape_logout_btn"></item>
</selector>

drawable-v21

1
2
3
4
5
6
7
8
9
10
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#E5E5E5">

<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<corners android:radius="@dimen/common_action_button_h" />
<solid android:color="@android:color/white" />
</shape>
</item>
<item android:drawable="@drawable/shape_logout_btn"></item>
</ripple>