分类目录归档:未分类

支持 LowPoly, 轻巧强大的打码应用:纯纯打码 v2.9

纯纯打码是一款由我独立设计和开发、专注打码的轻应用,包含功能:传统马赛克、毛玻璃效果、选区和手指模式打码,更有创新型高亮打码和 LowPoly 风格马赛克。只为满足一个纯纯的打码需求,让打码也能成为一种赏心悦目。

只有 2.6MB 大小,精致而专业。photo_2016-10-13_12-51-32

v2.9.3 (大幅优化和更新):

  • 新增 LowPoly 马赛克风格
  • 修复 Android 5.0 以下系统无法使用 LowPoly 问题
  • 优化 缩放图片流畅度
  • 优化 图片边缘选择
  • 新增 模式选中下标
  • 新增 显式调整栏
  • 新增 高亮模式暗度调整
  • 提示: 可通过其他应用分享图片到纯纯打码进行打码

下载:http://fir.im/puremosaic

一种新的 Header View + RecyclerView 实现方式

在 GitHub 开源了一种新的 Header View + RecyclerView 实现方式,使用 CoordinatorLayout 把 header 抽离出 RecyclerView,并做到上下滑联动,这样 Java 层代码就能简单和简洁很多,更便于刷新和响应,也不用写多 item view type 逻辑。

源代码:

https://github.com/drakeet/RecyclerViewWithHeaderNewPractice

XML 代码层次是这样的:

说明:

  • 可以使用 SmoothAppBarLayout 这个第三方库,它是一个提供顺滑滚动的 AppBarLayout 补足库,这一个层次必须置于 RecyclerView 代码下面,也就是界面上是在 RecyclerView 的上层,这样AppBarLayout 包裹的 header views 才能接收到点击事件(其实根本原因是,RV 对于 Padding 部分也会拦截手势所以不得不这么做)。
  • 如果想要列表上滑的时候,状态栏跟随着滑动显示出阴影效果,可以在 FrameLayout 外再包裹一层 android.support.design.widget.CollapsingToolbarLayout. 可以实现如图效果(注意状态栏阴影):
  • Demo 中的 UI 来自著名的 App Peach,为了避免写太多无关的、具有干扰性的 UI 代码,俺使用了两部分截图来替代繁琐的 UI 实现,在此声明和感谢  Peach.

使用 Python 创建 Telegram 机器人

要说聊天体验,telegram 比微信好很多,微信消息一多就卡,而且没法直接引用消息进行回复导致经常找不到上下文。telegram 则始终异常流畅,记录阅读位置,消息多的时候也不会觉得跟不上聊天节奏或卡 … 当然了,这一段都不是今天要写的这篇文章的重点,这篇文章主要还是要介绍一下如何开发 telegram 机器人,telegram 在去年中旬的时候开放了机器人的 API,可以设置 hook,使得所有消息都能被转发到你的服务上,然后作出自动化回复。

机器人可以被邀请入群做很多辅助工作,比如输入 “/google xxx” 就可以得到谷歌查询的结果等等,甚至还有人开发了 /fff 命令,用来烧死异性恋😂什么的,只要发送一条 “/fff install someone” 的消息到机器人所在的群聊当中即可。总之,利用 bot API 几乎无所不能,也十分有意思。

俺从几天前开始玩耍 telegram bot API,开发了一个属于自己的机器人,@XiaoaiBot,可以回声、计算两个日期的间隔时间、以及帮用户在群里找出最近一个 @ 消息,应该说还是非常好玩的。
继续阅读

使用 Python 开发 LeanCloud 云引擎入门教程

作为独立应用开发者,可能很多时候没有能力或者精力再去开发一个为 App 或者网站服务的后端程序,对于这个问题,我的一个解决方案就是使用 LeanCloud 的云引擎功能,通过云引擎,可以在短时间内快速开发出一个稳定、可靠、可升级拓展的服务。正好最近学习了 Python,于是使用 Python 并基于 LeanCloud 的云引擎功能进行了一次实践,而且由于官方文档并没有写得很好,我碰了几次壁,而且内容分散在好几个页面,所以觉得有必要在此再详细记录下并分享给大家。

注:以下部分内容并非完全原创,有的摘自官方文档,官方文档链接在文末有给出。

零,你得先学会 Python

JS 也是可以的,但由于我这篇文章主讲的就是使用 Python 来开发,所以要求至少得懂得 Python。不过不懂也不要紧,只要有兴趣肯去学,一个 Python 最多也就一两周的事情。我也是上一周利用一点点业余时间学了几下就懂了,毕竟 Python 的名言是“人生苦短,我用 Python”…

一,注册 LeanCloud 账号并创建一个应用

关于这点,我就不细说了,这是一个非常简单直接的过程,没听说过 LeanCloud 的同学可以自己上官网查看捣鼓几下就知道了:https://leancloud.cn

二,进入应用的云引擎页面

云引擎的入口如下:

进入之后,点击左侧的设置,我们先来自定义一个子域名。进入“设置”页面之后,可以看到右边页面有一个”Web 主机域名“选项,可以填入你想要的子域名名字,比如我在我的这个测试应用的这边填的是:lunei-dev,那么等到一切都部署完之后,我们要访问的基本链接就是:lunei-dev.leanapp.cn

三,一些准备工作

需要先安装 LeanCloud 的命令行工具,也就是在终端中使用的。安装方式是在终端中输入:

npm install -g avoscloud-code

但由于 npm 已经被显而易见的不可抗力变为无法访问的存在,所以我们需要在调用它之前加一点黑魔法,详情见这篇文章:利用proxychains在终端使用socks5代理

这篇文章中,作者说的 cp ./src/proxychains.conf /etc/proxychians.conf 其实应该加上 sudo,不然可能会导致没有权限而复制失败,检查方式就是使用 vi 打开 /etc/proxychians.conf 这个文件,如果第一次打开,内容是空的,说明没有复制成功,因为正常情况下,它有许多默认内容。

搞定 proxychains4 以后,你就可以使用如下命令进行安装 LeanCloud 的命令行工具了:

sudo proxychains4 npm install -g avoscloud-code

四,创建要部署到云引擎上的应用

我们可以基于 LeanCloud 官方提供的一个 Python 项目模板,其源代码是在 GitHub 上开源的,使用如下命令:
继续阅读

LabelView

继承 TextView,能够在 TextView 上下左右固定设置文本的 View

Snip20151026_6

以前,我们如果要写出 我的id: drakeet 这样的条目内容,需要使用两个 TextView 组合,或者一个 TextView 然后每次 setText 的时候,setText ("我的id: " + user.id), sad…

现在呢,使用 LabelView 吧!

TODO

  1. 实现上下左右 text 的样式定义(已实现)
  2. 实现上下左右 text 的 margin or padding

LabelView 源代码:https://github.com/drakeet/LabelView

解决 RecyclerView 使用 paddingTop & clipToPadding = false 时,上方透明区域 Touch 事件无法下传

a2

解决办法相对比较简单,正好今天有人问到这个问题,所以把我的做法分享出来,即做一下手势分发即可,对此我继承 RecyclerView 做了 dispatchTouchEvent() 方法的重写,我使用了 Kotlin 编程语言,阅读起来应该不是什么问题,读者有需要的话,我已经增加了 Java 版本了,其他的可以自行修改。

原理就是当检测到有设置 clipToPadding = false 的时候,进行触摸点位置判断,在 dispatchTouchEvent() 方法返回 false 即表示对当前触摸事件不感兴趣,事件可将手势往下层传递,全部的代码下面会附上。

这篇文章可以说,让 RecyclerView 离无所不能真正又近了一步,从此可以不再搞什么 add header view 来设置头部内容了。当你突发奇想像我那么做(可以结合 CollapsingToolbarLayout 效果更好)的时候,遇到我所遇到的问题,这篇文章应该能够受益匪浅:D

Kotlin 版本:

public class GenerousRecyclerView : RecyclerView {

    public var mScrollY: Int = 0
    private var mEating = false

    public constructor(context: Context) : this(context, null)

    public constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)

    public constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {

        addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                mScrollY += dy
            }

            override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
                super.onScrollStateChanged(recyclerView, newState)
                when(newState) {
                    RecyclerView.SCROLL_STATE_IDLE -> mEating = false

                    RecyclerView.SCROLL_STATE_DRAGGING -> mEating = true
                }
            }
        })
    }

    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        return if (!mEating && !getClipToPaddingCompat() && mScrollY < paddingTop && ev.y <
                paddingTop) {
            false
        } else {
            super.dispatchTouchEvent(ev)
        }
    }

    /**
     * @return false, if sdk_int < 21. else return getClipToPadding();
     */
    private fun getClipToPaddingCompat(): Boolean {
        if (Build.VERSION.SDK_INT < 21) {
            return layoutManager != null && layoutManager.clipToPadding
        } else {
            return clipToPadding
        }
    }
}

Java 版本:

继续阅读

The kotlin programming language 中文翻译版下载

the-kotlin-programming-language

文件内容基于晓晨带领翻译的 kotlin 官方文档中文翻译项目:https://github.com/cctanfujun/kotlin-web-site-cn,其中我也是参与翻译了一篇 Null Safety,现在将之制作成一体的 PDF 文档,以便阅读或者打印,打印建议使用单张双页模式,实测效果很好。

Download:the-kotlin-programming-language

 

妹纸.gank.io

端午节回家的时候,无聊之中,做了一个专门欣赏妹纸的小应用,数据来自代码家的干货网站:http://gank.io 我只抓取了妹纸图做了个新的开源小应用:

直接下载:https://fir.im/mengmeizhi

源代码:https://github.com/drakeet/Meizhi

本来就是自用或内部使用的,也只开发了一个晚上加一个早上时间,并没有很高级很完善,只适配了小米2s 的屏幕尺寸,一些效果也只有 Android 5.0 以上的系统才会有,就酱啦~

通过这个项目,你可能可以学习到的内容有:

  • 多渠道打包
  • 使用 ORM 快速操作数据库
  • 访问网络,简单解析 HTML
  • RecyclerView 瀑布流的使用
  • RecyclerView 底部加载更多的简单实现
  • Material Design 的下拉刷新
  • 使用最新的 Design 兼容库
  • 使用 5.0 的 Share 组件或元素动画
  • 使用 Toolbar 完全替代 ActionBar
  • 更多…见我在 v2.0 版本完成开发写的文章

阿童木的自白

昨天接受了电视台的采访,并且要求我写一篇自白书,于是又写了这么篇自己的故事

据说我长得像阿童木,我震惊了 … 其实之前就有很多人说我像哈利·波特,但还是头一次听到有人觉得我像阿童木。

其实,在中学的时候我就捣鼓了很多东西,可能和从小的性格有关,比较喜欢一个人默默去思考和观察身边的事物。小时候,趴在地上玩蚂蚁洞都能自个儿玩一整天的我,或许早就埋下了成为闷宅程序员的种子了。

我的整个中学基本上是沉浸在各类书籍小说文学作品之上,那时候特别迷恋推理小说和日本文学,初中那会儿流行 99 读书人网上书店,我们就常常从饭钱省下来去买书,看多了自己也就喜欢上写作,从此我们家的电脑就常常在键盘滴滴答答敲击声中陪伴了我许多岁月,仍记得,第一次在推理小说杂志上发表了我自己的推理小说,特别地高兴……

所以说,在大学之前,其实我从来未曾想过有一天我会成为一名程序员,从未想过会和小伙伴们一起成立一家公司。那时候天真的我,每天很烦恼,每天思考了很多很多细腻的事情,一年可以写满 3 本日记本,梦想着,能有一天像村上春树那样,成为一名文学作家。
继续阅读

贝壳单词 v2.0

「贝壳单词」,是我开发的一款可让用户在完全无压力地情况下稳步提高英语水平的 App,它将单词显示在了利用率最高的`通知栏`和打扰性非常低的`全局吐司消息`中。不用撇开其他事情,不知不觉中完成词汇量的积累。

下载地址:http://fir.im/seashell(内附二维码)

豌豆荚设计奖:http://www.wandoujia.com/apps/me.drakeet.seashell

小米商店:http://app.mi.com/detail/65475