Android截取不可见的View并生成Bitmap

最近收到一个分享图需求,需要将当前页面进行截取后,生成一个Bitmap保存到相册或分享到微信/朋友圈。

而分享时需要隐去页面上很多按钮和文字,如果直接使用DrawingCache在保存的时候用户会看到页面元素消失再显示,那么这样体验会很差,所以使用另一种方式来实现。

  • 截取可见View的方法
1
2
3
4
5
6
7
public static Bitmap createBitmapFromView(View view) {
view.setDrawingCacheEnabled(true);
view.buildDrawingCache(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
return bitmap;
}

移除JS、TS文件注释

在某些特殊交付场景下,我们提交的代码可能需要清除掉开发中的注释,逐条移除显然不现实。
于是编写一个简单的Python脚本,来清除不必要的注释,并不追求移除全部注释,只移除大部分行尾行内注释。

处理RecyclerView滚动与点击事件(如:跑马灯)

在使用 RecyclerView 进行滚动时,通过定时器实现自动滚动,但在滚动中无法正确触发 item 的点击事件。
因为RecyclerView 滚动与点击事件是独立的,默认情况下,滚动操作可能会影响点击事件的传递。

解决方案

1. 使用 Handler 替代 Timer

在 Android 中,使用 Handler 更适合处理定时任务。替换原有的 Timer 实现,改用 Handler 来处理滚动任务。

Taro多环境配置

Taro项目在开发一定阶段后,就会面临环境部署的问题了,比如本地的开发环境,服务器的测试环境,如果每次打包都手动切换环境的话,实在是太不优雅了。
那么有没有什么办法,可以在打包的时候决定环境,并进行配置呢,答案是有的。

Taro在配置项里,有一个参数defineConstants,这个参数与同名Webpack参数一样,是可以在编译打包的时候,配置一个或多个全局的变量,通过打包参数的判断来切换变量,这样就可以实现多环境多配置的切换了。

SpringDataJPA使用@Query Native查询返回Map与对象转换

在使用JPA来操作数据库时,在遇到复杂查询时(包括JOIN嵌套等),需要使用到@Query来使用原生SQL或者Hibernate的HQL进行查询,Repository中编写如下:

1
2
3
4
5
6
7
8
9
10
11
12
// 仅为演示样例
public interface UserRepository extends JpaRepository<User, Integer> {
@Query(value = "select * from user as u where u.group_id = :gid",
countQuery = "select count(*) from user as u where u.group_id = :gid",
nativeQuery = true)
Page<Map<String, Object>> findAllUserByGroupId(@Param("gid") Integer groupId, Pageable pageable);

@Query(value = "select * from user as u where u.group_id = :gid",
countQuery = "select count(*) from user as u where u.group_id = :gid",
nativeQuery = true)
Page<Object[]> findAllUserByGroupId2(@Param("gid") Integer groupId, Pageable pageable);
}

@Query支持使用两种方式进行接收:

  • Object[]:
    通过使用 Object[0], Object[1] 来获取结果字段值,需要手动将字段转换为对应的Bean字段,非常的不优雅。
  • Map<String, Object>:
    Map中的Key为对应的数据库字段String名,Object为字段对应的值,通过使用Map.get(key)来获取对应字段的值,相比Object[]会优雅一些。

那么有没有一种办法,可以将Map转换为对应的Object?

Taro使用绝对路径引用

Taro项目初始化完毕之后,在编写组件的同时,需要进行页面与组件的组合和引用,这时,使用Vscode的默认提示的引用,会提示找不到/src路径,但是手工引用相对路径,却可以正常引用成功。

1
Module not found: Error: Can't resolve '/src/components' in '/xxx/project/src/pages/index'

但是很多时候,组件的位置会需要调整,每次都使用相对路径是十分繁琐的,能否使用绝对路径呢?是不是Taro就不支持绝对路径呢?

查看Taro说明之后可以发现,Taro确实是不允许“直接”使用绝对路径引用的,但是我们可以通过设置目录别名,来引用路径。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×