随笔分类 - Android-101
基础
摘要:
前言 柱状波形图是一种常见的图形。一个个柱子按顺序排列,构成一个波形图。 柱子的高度由输入数据决定。如果输入的是音频的音量,则可得到一个声波图。 在一些音频软件中,我们也可以左右拖动声波,来改变音频的播放进度 本文举例的自定View,实现如下功能: 以柱状形式展示数据的大小 标明图形当前最中间的数据
阅读全文

摘要:升降摄像头安卓手机刚上市的时候,有些很流行的app刚打开时,前置摄像头就升起来了。好像就是出来看一眼然后又收回去。 虽然我们不调用拍照功能,只是为了获取相机的信息,也是可能让摄像头升起来的。 Camera实现 使用android.hardware.Camera获取摄像头支持的预览尺寸和fps。 先C
阅读全文
摘要:市面上常见的摄像头悬浮窗,如微信、手机QQ的视频通话功能,有如下特点: 整屏页面能切换到一个小的悬浮窗 悬浮窗能运行在其他app上方 悬浮窗能跳回整屏页面,并且悬浮窗消失 我们探讨过用CameraX打开摄像头预览,结合可改变大小和浮动的activity,实现了应用内摄像头预览悬浮Activity。这
阅读全文
摘要:悬浮窗能显示在其他应用上方。桌面系统例如Windows,macOS,Ubuntu,打开的程序能以窗口形式显示在屏幕上。 受限于屏幕大小,安卓系统中主要使用多任务切换的方式和分屏的方式。视频播放,视频对话可能会采用悬浮窗功能(例如手Q,微信的视频通话)。应用留下一个视频(通话)窗口,用户可以返回安卓桌
阅读全文
摘要:用CameraX打开摄像头预览,显示在界面上。结合悬浮窗的功能。实现一个可拖动悬浮窗,实时预览摄像头的例子。 这个例子放进了单独的模块里。使用时注意gradle里的细微差别。 操作摄像头,打开预览。这部分代码与Android CameraX 打开摄像头预览相同。 悬浮窗相关代码与可拖动悬浮窗相同。在
阅读全文
摘要:悬浮窗是一种比较常见的需求。例如把视频通话界面缩小成一个悬浮窗,然后用户可以在其他界面上处理事情。 本文给出一个简单的悬浮窗实现。可缩小activity和还原大小。可悬浮在其他activity上。使用TouchListener监听触摸事件,拖动悬浮窗。 本文链接 缩放方法 缩放activity需要使
阅读全文
摘要:Android CameraX获取视频帧。设置分析器以及分析器的各项参数。将获取到的视频帧数据存为文件。Android CameraX Analyzer ImageProxy YUV_420_888 to NV21
阅读全文
摘要:目标很简单,用CameraX打开摄像头预览,实时显示在界面上。看看CameraX有没有Google说的那么好用。先按最简单的来,把预览显示出来。 引入依赖 模块gradle的一些配置,使用的Android SDK版本为31,启用了databinding apply plugin: 'com.andr
阅读全文
摘要:
简介 某些音乐播放或者视频播放的界面上,资源还在加载时,进度条的原点(thumb)会显示一个转圈的效果。 资源加载完成后,又切换回静态效果。这个效果增强了用户体验。 一般来说有美术人员负责设计和切图。尝试实现时,我们可以使用使用drawable,来模拟实现这个转圈的效果。 示例 dimens.xml
阅读全文

摘要:给现有的Android应用工程中引入Compose。需要对gradle进行设置。引入后使用Compose验证一下。
阅读全文
摘要:引入 Jetpack Compose 示例工程 去GitHub上找到Compose的示例工程 https://github.com/android/compose-samples ,clone到本地 网络不好的同学也可以去gitee上面搜索「compose-samples」,也能找到这个示例工程。
阅读全文
摘要:Android官方推荐使用协程来处理异步问题。以下是协程的特点: 轻量:单个线程上可运行多个协程。协程支持挂起,不会使正在运行协程的线程阻塞。挂起比阻塞节省内存,且支持多个并行操作。 内存泄漏更少:使用结构化并发机制在一个作用域内执行多项操作。 内置取消支持:取消操作会自动在运行中的整个协程层次结构
阅读全文
摘要:Android教程,View.post方法流程分析。View.post与Handler的post方法有何不同?先来简单看一下Handler的post(Runnable)方法。这个方法是将一个Runnable加到消息队列中,并且会在这个handler关联的线程里执行。可以看到一开始就查询是否有attachInfo,如果有,则用attachInfo.mHandler来执行这个任务。
阅读全文
摘要:本文主要使用kotlin,讨论Android开发中的线程池用法。 我们想使用线程的时候,可以直接创建子线程并启动 Thread { Log.d("rfDev", "rustfisher said: hello") }.start() 不想每次都创建新的子线程 如果有大量的异步任务,不想每次都创建子线
阅读全文
摘要:App有时可能需要定期运行某些工作。例如,可能要定期备份数据、上传信息到服务器,定期获取新的内容等等。 在app运行期间,我们使用Handler也可以完成定期的功能。在这里我们介绍WorkManager使用定时任务的方法。 前面我们介绍了WorkManager的使用方法,约束和延迟等。本文介绍Wor
阅读全文
摘要:WorkManager工作约束,延迟与查询工作 本文可能会混用“工作”与“任务”这两个词。 本文例子使用Kotlin 准备一个工作类(任务)UploadWorker2 class UploadWorker2(context: Context, params: WorkerParameters) :
阅读全文
摘要:WorkManager使用入门 WorkManager提供了任务调度功能,我们可以对工作进行标记或命名。 我们用一个示例来演示如何使用WorkManager。本文使用Kotlin。 入门示例 gradle引入依赖 将以下依赖项添加到应用模块的build.gradle文件中 dependencies
阅读全文
摘要:Android补间动画。旋转,位移,缩放,透明度变化。
阅读全文
摘要:帧动画 使用一系列不同的图片,然后像一卷胶卷一样按顺序播放,这是一种传统的动画,也可称为帧动画。也可以比喻为像一卷胶卷一样按顺序播放。 播放起来,有点像在看gif图。 本文介绍使用AnimationDrawable类来实现动画效果。 为了开发方便,我们可以在xml中指定动画各个帧的信息。 使用背景图
阅读全文
摘要:使用链控制线性组 链是一组视图,这些视图通过双向位置约束条件相互链接到一起。链中的视图可以垂直或水平分布。 1. Spread:视图是均匀分布的(在考虑外边距之后)。这是默认值。 2. Spread inside:第一个和最后一个视图固定在链两端的约束边界上,其余视图均匀分布。 3. Weighte
阅读全文