When I complete a project using Kotlin which I had also completed with Kotlin five years ago
Recently, there has been an increasing frequency of Kotlin usage, prompting me to do a simple reorganization of my Kotlin code in recent years. While reviewing my work, I stumbled upon a project that I completed five years ago using Kotlin(Bezier Curve), Out of interest, I decided to use Kotlin and Compose to re-implement the project. This also gives me a chance to reflect on what I have learned in Kotlin over these years.
Regarding Bézier curves, we won’t go into too much detail here. Simply ...
当我再次用Kotlin完成五年前已经通过Kotlin完成的项目后
近日来对Kotlin的使用频率越来越高, 也对自己近年来写过的Kotlin代码尝试进行一个简单的整理. 翻到了自己五年前第一次使用Kotlin来完成的一个项目(贝塞尔曲线), 一时兴起, 又用发展到现在的Kotlin和Compose再次完成了这个项目. 也一遍来看看这几年我都在Kotlin中学到了什么.
关于贝塞尔曲线, 这里就不多赘述了. 简单来说, 针对每一个线段, 某个点到两端的比例都是一样的, 而贝塞尔曲线就是这个过程的中线段两端都在同一位置的线段(点)过程的集合.
如图, AD和AB的比例, BE和BC的比例还有DF和DE的比例都是一样的.这个比例从0到1, F点的位置连成线, 就是ABC这三个点的贝塞尔曲线.
两次完成的感受虽然时隔五年, 但是对这个项目的印象还是比较深刻的(毕竟当时找啥资料都不好找).
当时的项目还用的是Kotlin Synthetic来进行数据绑定(虽然现在已经被弃用了), 对于当时还一直用findViewById和@BindView的我来说, 这是对我最大的惊喜. 是的, 当时用Kotlin最大惊喜就是这个. 其它的感觉就是这个”语法糖”看起来 ...
When I first coding a Canvas using Kotlin and Compose, what did I gain?
When I first coding a Canvas using Kotlin and Compose, what did I gain?
Since Google recommended Kotlin as preferred language for Android development in 2019, nearly four years have passed, Compose 1.0 version has been release for almost two years now. However Kotlin + Compose is not yet the preferred choice in Android devleopment. Should we still consider trying this combination? What benefits will this choice bring us?
For me, I am both conservative and open to new things. Since early 2018, I ...
当我第一次通过Kotlin和Compose来实现一个Canvas时, 我收获了什么?
当我第一次通过Kotlin和Compose来实现一个Canvas时, 我收获了什么?
自从2019年Google推荐Kotlin为Android开发的首选语言以来已经经历了将近四年的时间, Compose的1.0版本也发布了将近2年的时间, Kotlin+Compose在现阶段的Android开发过程中还远远达不到主流的程度. 我们是否应该开始尝试这个组合? 这个组合有会给我们带来什么?
对于我来说, 我是个守旧又喜新的人, 自2018初我就尝试用Kotlin来完成一些Android的工作了(Android For Bezier), 但是一直没有将kotlin作为我个人的Android首要开发语言. 不过随着Kotlin+Compose这个组合社区的完善, 越来越多的人开始尝试这个组合, 并为这个组合的社区构建添了加自己的一份力. 得益于Kotlin和Java之间可以无感的互相调用, 越来越多的人(包括我)开始尝试将Kotlin或Kotlin+Compose加入到现有的开发项目中, 本文将展示一些我在这个组合中遇到的收获和思考.
从一个自定义Canvas开始先看下效果, 动画原始效 ...
在Android应用中通过Chaquopy使用Python
在Android应用中通过Chaquopy使用Python” [译]通过Python脚本和包为Android应用带来更多的功能
翻译自https://proandroiddev.com/chaquopy-using-python-in-android-apps-dd5177c9ab6b
Python在开发者社区中时最受欢迎的语言之一, 因为其简单,健壮并且有着庞大的软件生态使其可以在多个领域发挥作用. 类似NumPy和SciPy这样的包允许你在项目中使用高等数学计算, 而这样的计算在其它的语言中是无法简单实现的. 那么如果将Python引入到Android应用中又会带来什么样效果呢?
Chaquopy是一个可以帮助开发者通过Java/Kotlin在Android平台中运行Python脚本的框架. 和其它跨语言库不同, 它不再有NDK依赖的烦恼, 也不需要native code[^1], 并且安装也十分的简单. 在这篇文件中, 我们将探索Chaquopy, 并通过Kotlin来进行构建和使用.
Chaquopy是什么? 它是如何让Python在Android中运行的?和大多 ...
What different between drawable and mipmap in Android
In old project code, some images were use in the ‘drawable’ folder, and other in the ‘mipmap’ folder. Occasionally, I had doubts and searched for articles. But I an not understand enough. Recently, I try to find it. so I checked the content of the article one by one and found that the actual results were far from the conclusion.
Several common conclusionsCase 1 drawable will remove other densities, mipmap will retain all (the final conclusion is related to this)
When a xhdpi density phone loa ...
开始使用Android Gradle Plugin来帮助你进行项目的构建
一切的一切到要从阿里云emas移动推送说起, 这玩意的接入过程暂且不表, 有兴趣的可以看一看, 尤其是其控制台.接入后主要需要在build.gradle中进行配置, 同时还有一份配置文件在app目录下.但是emas的配置文件只能配置一份, (甚至不能实时更新, 需要gradle clean), 而实际的开发使用中可能包含开发,测试和上线环境的配置.这些配置就需要我们在构架的时候自动匹配为最近的配置文件.
0.在开始之前其实最开始的实现方式并不是这篇文章使用的Android Gradle Plugin的方法来解决, 遇到这个情况的时候, 第一个想到的方法是在build.gradle中修改task来实现, 但是阿里云emas移动推送是通过Gradle Plugin的形式引入的, 如果task来实现的话会在emas plugin执行后再执行我们的task, 这样就导致了对应的配置文件可能没有更新成功问题的发生.
第二个的想到的方法是通过shell在gradle build执行前处理对应的文件. 不过由于是团队合作的项目, 更改项目的构架方法可能会影响到其他人, 秉承着对他人影响最 ...
Android中drawable和mipmap到底有什么区别
老项目代码中发现有的图片放到了drawable中, 有的图片放到了mipmap中, 开发时秉承哪个目录下文件多放哪里的原则, 偶尔有疑惑搜一搜文章, 看到了结论也就这么使用了, 不过今日有时间, 依次检验了一下文章中的内容, 发现和实际的表现出入甚远.
常见的几种结论Case 1 drawable会剔除其它密度, mipmap会保留全部(实际上最终的结论和这个有关联)
当xhdpi密度的手机在加载apk的时候Google是有一个优化的,是会剔除drawable其他密度的文件,只保留一个基本的drawable和drawable-xhdpi的文件,而mipmap是会全部保留的。
检测方法也比较简单, 在drawable和mipmap不同密度的问价夹下分别放入同一类图片(图片标文字用于检查), 分别打包并检查其大小
Case1.1 安装包与应用大小
安装包大小
应用大小
drawable
13.3 MB (14,016,841 字节)
14.04MB
mipmap
13.3 MB (14,017,191 字节)
14.04MB
结论1.1由此可见, 虽然两 ...
Android杂食店-一次自定义动画的实现
半年更系列
之前写过不少自定义View及Canvas绘制的文章, 不过都是怎么做, 没有写明为什么要这么做. 刚好这次有了一个比较简单经典的动画, 记录下完成的过去, 希望可以起到一个抛转引玉的效果.
最终效果
可以看到这个效果还是比较简单的, 是一个模拟日光晃动的效果, 一般出现与和天气有关的场景中.
设计思路设计思路和大家都一样:
分解静态动画
实现静态动画
实现动态动画
关于动画如何动起来. 我一般习惯于先将静态的动画完成, 再重新考虑如何动起来, 虽然看起来影响到之前已经完成的代码. 不过相较于在动态静态一并完成, 这样分开考虑更加的简单. 而且针对与自定义动画的实现来说, 代码量还没有大到无法二次开发的程度.
分解静态动画简单来说就是将动画分解为一个个最基础的效果, 毕竟代码还是要讲规则的.
需要注意的是, 有的动画在前后的变化过程中, 出现的元素时不一样的.这都是需要一个一个进行分解的. 在这个过程中, 也不能完全规避动态的部分.
简单来说, 如果你的动画中有一个圆, 你可以把它看成一个圆, 也可以把它看成两个半圆拼接而成. 如果动画流程中, 它一直都是一个圆 ...
Procedural Dungeon Generation Algorithm - 地牢程序生成算法
本文经@a327ex授权翻译与转载, 原文链接1: GitHub,原文链接2: gamedeveloper
这篇文章阐释了一种生成随机地牢的技术,该技术首先由TinyKeepDev在此描述.我将比原始帖子中的步骤更详细地介绍它.此算法的实现流程如下:
生成房间首先, 你需要在一个圆内生成随机的生成一些具有一定宽度和高度的房间.TKdev的算法通过正太分布来控制房间的大小, 我认为这是一个好主意, 因为它可以通过更多参数来进行控制.通过控制宽高比和标准方差可以生成外观不同的地牢.
一个你可能需要的方法getRandomPointInCircle
1234567function getRandomPointInCircle(radius) local t = 2*math.pi*math.random() local u = math.random()+math.random() local r = nil if u > 1 then r = 2-u else r = u end return radius*r*math.cos(t), radius*r*math.s ...