
Glide的基本用法
Glide的基本用法Glide是大名鼎鼎的Android图片加载框架,使用及其简单方便。先来了解一下Glide的基本用法吧。Glide图片加载框架的流程原理见另外一篇博客Glide源码调用流程分析。GitHub:https://github.com/bumptech/glide1、依赖Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简
Android 开发 · 共 60 篇 · 按发布时间正序排列
图片加载、Drawable 体系、音视频与图形绘制:视觉技术专题

Glide的基本用法Glide是大名鼎鼎的Android图片加载框架,使用及其简单方便。先来了解一下Glide的基本用法吧。Glide图片加载框架的流程原理见另外一篇博客Glide源码调用流程分析。GitHub:https://github.com/bumptech/glide1、依赖Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简

Android多媒体MediaPlayerAndroid提供了多媒体播放库MediaPlayer,在播放音视频的时候可以方便的使用。存储在应用程序资源(原始资源)中的媒体文件、文件系统中的独立文件或通过网络连接到达的网络数据流中播放音频或视频。在使用MediaPlayer对应用程序进行开发之前,必须声明一下权限,才能正常使用: Internet权限——如果您正在使用MediaPlayer来播放流基
网易云音乐的外链播放器搭建个人网站的时候放点音乐,会显得高大上一些。网易云音乐提供单曲、专辑、歌单、电台节目的外链播放器,将外链播放器放在论坛、网站上,都可以免费播放。1.在网页版(music.163.com)进入单曲、歌单、专辑、电台节目页面后,点击生成外链播放器链接。2.歌单和专辑外链播放器可以选择大中小三种尺寸,单曲和电台节目可以选择中小两种尺寸。你可以选择最适合你网站设计的尺寸。3.还可以

这两天bug不断,最恶心的是改好了一个bug,竟然又多了7个bug。搜索结果上滑固定标题,同时增加一个更多点击事件。跳转到对应页面、应用。有很多类型的搜索结构都需要设置,类型type添加到一个数组里面,判断是否是需要的类型。由于丢三落四,忘了把一些类型加进去。最后一个一个核对,终于把所有的搜索结果需要点击的都加到more[type]中,但是有一些仍然点击不了,原来对应的Adapter没有设置相应的

ShapeDrawable:Android自定义背景自定义背景样式shape,在res/drawable目录下。一般通过setBackground()设置成TextView、Button等控件的背景。让程序员也可以定义多种多样的背景。更多Drawable详见Android Drawable。1、shape自定义背景样式根标签<shape></shape>,形状shape有四种可以选择:rectan

StateListDrawable:状态Drawable控件处于不同的状态,如点击、释放、勾选、不可用等状态时设置不同的样式。在代码中可以通过条件判断去根据不同的状态进行判断再设置不同的属性,这样做太麻烦了。Android给我们的drawable提供了便捷的设置方式,就是自定义一个selector背景样式,给不同的状态属性设置对应的drawable资源。更多Drawable详见Android Dr

安全性要求比较高的APP,一般会禁止在某些页面Activity进行截图,诸如农业银行的APP。加上下面的flag即可:在Activity的onCreate()方法给Window加上flag:WindowManager.LayoutParams.FLAG_SECURE尝试截图的时候会提示“由于应用限制,该界面无法截图”,录屏的时候也会提示失败参考博客: 《Android之禁止APP截图、录屏》 An

AudioManager顾名思义,音频管理器,是Android中定义的类,方便我们设置手机中的各种音频。如多媒体音量获取和调节、设置铃声等。获取AudioManager实例,调用Context中的方法:AUDIO_SERVICE获取AudioManager对象,该静态变量在Context中的定义如下。Context中还定义很多其它类型参数,这里不再详述。AudioManager类中定义了丰富的AP

Android主题Theme探究Android预先定义了很多主题,我们也可以在values/styles.xml文件中自定义主题。1、三个颜色新建一个工程AndroidStudio会在styles.xml中帮我们定义一个默认AppTheme,其中有三个颜色值colorPrimary、colorPrimaryDark、colorAccent,含义如下:2、常用属性: 状态栏、顶部导航栏相关: Win
Android Drawable安卓开发中经常用到Drawable设置View的背景,那只是最基本的用法,Drawable可远不止这些,现在就来系统的学习一下Android Drawable系列。1、DrawableDrawable官方定义是“可以绘制的东西”的一般抽象概念。框架中有非常多的Drawable派生类,方便开发者使用:ShapeDrawable、StateListDrawable、La
Bitmap加载选项:BitmapFactory.Options1、BitmapFactory.OptionsBitmapFactory.Options是BitmapFactory加载Bitmap用到的选项配置,用于解码Bitmap的时设置各种参数选项。BitmapFactory的使用参考BitmapFactory详解。2、重要属性BitmapFactory.Options类有很多public成员

MediaStore:安卓多媒体数据库MediaStore是Android系统提供的媒体数据库信息类。封装了文件、视频、音频、图片、下载的信息,可以用Uri通过ContentProvider方便的查询系统中的这些媒体信息。MediaProvider负责处理这些查询请求,内部维护SQLite数据库。在系统/packages/providers/目录下,系统中有许多类似的Provider,比如之前介绍

Glide源码调用流程分析抽空挑灯夜战Glide源码,自己平时用过很多次glide(但是项目中一般不用),非常方便(glide用法见《Glide的基本用法》)。但是只会“拿来主义”并不是一个合格的程序员,还需要“刨根问底”,知道底层的实现原理,为什么人家能够做出这样牛掰的开源库,自己也可以学习积累其中的设计原理和思想,将来说不定也能找准合适的方向写一个。Glide的用法很简单,是因为Glide的设
深入 AOSP:深色模式原理与 Framework 源码解析深色模式(Dark Mode)是 Android 10(API 29)引入的一项系统级功能,允许用户在深色背景下使用设备,减少眼睛疲劳,延长电池续航。从 Framework 层面来看,深色模式涉及多个系统服务的协同工作。1、深色模式概述深色模式的核心组件包括: • UiModeManager:管理 UI 模式切换 • ThemeManag

截图神器:Snipaste工作学习过程中经常需要截取电脑屏幕,Windows自带截屏按住PRTSC键即可截取当前整个屏幕。即时聊天工具都自带截图工具,比如QQ、微信等可以自由的截取电脑屏幕任何区域,还可以对截图进行编辑处理。推荐一个自己用了很久,非常方便且小巧的截图软件:Snipaste。提一下,它是用Qt写的。1、介绍“Snipaste 使用很简单,但同时也有一些较高级的用法可以进一步提升你的工

Tinify(TinyPNG)详解:智能图片压缩与 Java API 接入图片往往是网页体积的大头,也直接决定加载速度与带宽成本。Tinify(其在线工具更广为人知的名字是 TinyPNG)由 Voormedia 出品,用智能有损压缩把 WebP、PNG、JPEG 的文件大小降低 50~80%,同时几乎不损失观感、并完整保留 PNG 的透明度。它既能在线用,也能通过开发者 API 集成进自己的应用
View中的神笔:Paint接下来就进入Android另一个开发方向,View界面,主要涉及到自定义View,是应用于用户交互的前沿。和自定义View相关的框架有两个:一大类是View(../frameworks/base/core/java/android/view/),另一大类是Graphics(../frameworks/base/graphics/)。自定义View最主要的就是使用系统提供

大有可为的着色器:Shader平时开发的时候或多或少都接触过相关的技术,但是却没有系统详细的学习一下。Android设计到的知识点很多,特点广泛而杂。有网络相关的,硬件相关的,图形图像相关的等等,每一点都得或多或少需要学习掌握一些。1、ShaderShader直译过来就叫“着色器”,该类是抽象的基础类,Shader共有五个子类:BitmapShader、LinearGradient、RadialG

Drawable中的形状:ShapeDrawable在安卓开发中非常常见,常用来作为View的背景。但是光会简单的用法还不够,需要对这个图像体系有一个整体系统的认知,详见《Android Drawable》。和Drawable有关的就是Shape图形,在自定义Drawable也接触过<shape />标签,见《ShapeDrawable:Android自定义背景》。1、ShapeShape定义通用

LayerDrawable:叠加图层今天要介绍的Drawable只中的层叠Drawable:LayerDrawable,通过将一些图片层叠的方式组合起来,实现特殊的显示效果。比如EditText输入框的下划线背景:更多Drawable详见Android Drawable。1、LayerDrawableLayerDrawable是管理其他可绘制对象阵列的可绘制对象。列表中的每个可绘制对象均按照列表顺

LevelListDrawable:按级别选择Drawable更多Drawable详见Android Drawable。1、简介LevelListDrawable管理多个备用Drawable的资源,每个Drawable都分配了一个最大数值。 使用setLevel(int )设置对象的级别值将为图像加载下一个大于或等于其max属性的值。 LevelListDrawable的一个很好的用法示例是电池电

InsetDrawable:内嵌Drawable更多Drawable详见Android Drawable。1、InsetDrawableInsetDrawable将其它Drawable内嵌到自己,在四周预留空白。当视图需要的背景小于视图的实际边界时,使用此方法很有用。当然之前学到的LayerDrawable:叠加图层也可以实现该需求。2、语法参考Inset drawable。2.1、语法Inset

Bitmap位图介绍Android中的Bitmap和Java中的Bitmap可不一样,它专门用来存储图像。给ImageView显示,或者用来存储Canvas画布绘制的图像。1、了解Bitmap关于Bitmap有一些知识点需要先了解。1.1、Bitmap用途Bitmap最常用的两种用途,前面已经说到:①设置给ImageView显示②用来保存Canvas画布上绘制的图案1.2、Bitmap.Confi
BitmapFactory详解Android提供了BitmapFactory类来创建Bitmap位图。关于Bitmap详见Bitmap位图介绍。1、BitmapFactoryBitmapFactory顾名思义,Bitmap工厂,专门用于创建Bitmap位图。该类功能比较单一,一眼就能看懂。主要有两点:创建Bitmap的静态方法,以及创建Bitmap的选项Options。参考 Reference >

Glide配置:AppGlideModuleGlide用起来非常方便,基本用法见Glide的基本用法,简短的一句链式调用就能给ImageView设置图片。而且自带缓存实现,如果不进行额外的设置Glide的缓存目录、缓存大小都是默认的。应用可以自行进行定制修改,就用到AppGlideModule。1、自定义AppGlideModule配置Glide加载图片的设置、缓存设置、缓存策略,就需要应用自己继

Honeycam 最好的GIF动图软件推荐一款Gif制作软件:Honeycam,是一款高质量的GIF动图制作和编辑器。以前将视频转GIF,录制屏幕动图要费很大功夫,这款软件真的非常简洁好用,值得收藏,博客上的GIF都是用Honeycam录制的。官网:Honeycam1、简洁的界面下载安装完成后打开,主界面很简洁。2、录制屏幕选择录制,调整好要录制的区域录制完成后,可以编辑每个帧,调整帧时长,删除多

Volley图片加载ImageLoader在Volley加载网络图片中了解到使用ImageLoader进行加载图片,本文来看看ImageLoader源码如何结合RequestQueue实现网络图片加载的。源码分两部分看,一部分是从ImageLoader的get(...)方法开启图片加载请求,另一部分是NetworkDispatcher的网络请求结果回调。1、图片加载请求总体的请求逻辑如下,大部分代

Volley网络图片加载控件NetworkImageView在Volley图片加载ImageLoader一文中了解了使用ImageLoader进行图片加载的原理。还有更简单的网络图片加载,在Volley加载网络图片一文第3节提到NetworkImageView,继承自ImageView通过简短的200行代码,结合ImageLoader实现一个简单易用的图片加载控件。让我们通过源码了解Network

文件夹标记工具:Folder Painter刷抖音的时候看到一款非常好用(且免费)的文件夹美化工具:Folder Painter,点赞不如记录一下这个工具。可以让Windows上枯燥的文件夹变得五颜六色,增加美观度和辨识度,比如将重要的文件夹标记为显眼的红色。去官网:folder-painter上下载Folder Painter,免安装,解压后直接运行程序。麻雀虽小五脏俱全,软件支持中文等多语言,
Android ColorStateList 详解1、ColorStateList 概述ColorStateList 是 Android 中用于管理不同状态下颜色的类,它允许为 View 的不同状态(如按下、聚焦、禁用等)设置不同的颜色。ColorStateList 广泛应用于按钮、文本框等控件的颜色管理,是实现响应式 UI 的重要工具。核心特性: - 支持多种 View 状态的颜色定义 - 可以

免费的录屏软件 oCam找到一个免费而且简洁的视频录制软件:oCam,之前录视频用的是Camtasia不仅付费而且操作麻烦。1、下载安装从Softonic下载oCam安装:oCam Download。2、界面功能界面简洁,菜单中有三个常用的录制场景:视频录制、游戏录制、音频录制,一键录制非常方便。日常录制视频不需要那么多眼花缭乱的菜单,只需录制、区域选择、声音设置、编码设置这几个。使用默认选项录制

SurfaceFlinger启动流程 好久没有看源码,恰好接触到SurfaceFlinger,简单了解一下SurfaceFlinger。SurfaceFlinger是一个系统服务,接受来自多个来源的数据缓冲区,对它们进行合成,然后发送到显示设备进行显示。在Zygote进程的启动一文中,了解到:在系统启动时,init进程读取位于/android/platform/system/core/rootdi

三种常见的颜色格式及其转换:RGB、YUV、CMYK彩色记录的格式有很多种,常见的有RGB、YUV、CMYK这三种。RGB是运用最广的颜色系统之一;YUV的发明用于彩色电视与黑白电视的过渡;CMYK即印刷色彩模式,顾名思义就是用来印刷的。Android开发中用到的主要是RGB,详见Color详解一文。1、常见的三种颜色格式1.1、RGB格式RGB模式是一种发光的色彩模式,诉求于人眼对色彩的感应。R

Upscayl:开源免费的 AI 图像处理工具最近AI火爆,在GitHub上发现一个强大的AI图像处理工具:upscayl,并且已经开源:github/upscayl/upscayl。轻松让图像放大变清晰,用来处理一些场景的图片清晰效果还是不错的。upscayl提供了离线的版本,兼容各种操作系统:包括 MacOS、Linux 和 Windows。不需要魔法,直接下载下来安装即可:安装好之后直接运行

颜色矩阵ColorMatrix1、ColorMatrix颜色矩阵ColorMatrix是一个用来表示三原色和透明度的4x5的矩阵。1.1、介绍将ColorMatrix表示为一个数组的形式如下:一个颜色则使用 [R, G, B, A] 的方式进行表示,所以矩阵与颜色的计算方式则为:从上述的公式可以看出,颜色矩阵的功能划分如下:a, b, c, d, e 表示三原色中的红色f, g, h, i, j

免费的视频编辑器:AvidemuxAvidemux 是一个免费的视频编辑器,可以进行剪切、过滤和编码等任务。支持广泛的文件格式,包括 AVI 文件的编辑,DVD 的 MPEG 文件、MP4 和 ASF,并能将声音从文件中分解出来。官方下载地址:avidemux.sourceforge/download支持强大的队列任务处理和脚本功能,日常工作中用来分析录屏还是很有用的。Avidemux下载网盘下载
截屏监听:ScreenCaptureCallback非系统应用是没有办法监听用户截屏操作的,当然开发者有很多奇技淫巧去完成这个需求:ContentObserver监听媒体库、FileObserver监听文件,再对比图像文件名称(一般包含时间命名)、路径(一般包含screenshot等字符)、时间戳等信息过滤截图。从Android 14即API 34开始,Android提供了一个官方接口Screen
WebView视频全屏播放在StackoverFlow上就看到一篇实现WebView全屏播放Youtube网页视频的方法,这个方法很不错。废话不多说,直接看操作:继承WebChromeClient,重写WebChromeClient中的onShowCustomView(View , CustomViewCallback)和onHideCustomView()方法来实现网页视频全屏播放功能:首先看o

ViewOutlineProvider设置圆角矩形等形状在项目开发中,为了让图片显示得更加美观,通常 UI 会设计成圆角矩形或圆形效果。介绍一种简单的原生方法设置圆角。ViewOutlineProvider是Android 5.x引入的新特性(SDK_INT >= 21),它是View包中的类,用于实现View的阴影和轮廓。用ViewOutlineProvider可以快捷地实现控件的圆角(Kotl
文件树高亮标记工具 —— ProjectTree Color Highlighter 插件推荐在使用 JetBrains 系列 IDE(如 IntelliJ IDEA、PyCharm、WebStorm 等)进行开发时,当项目中存在多个 Module 或大量文件时,从 Project Tree(项目树)和 Tab 页签中快速分辨不同模块的内容是一件令人头疼的事情。ProjectTree Color

Android画中画模式完全指南作为移动端提升用户体验的重要功能之一,画中画(Picture-in-Picture,简称PIP)模式让用户在离开应用界面后仍能继续观看视频或进行语音通话。本文将全面剖析Android系统中两个关键方法的区别和使用场景。1、基本概念区分1.1、enterPictureInPictureMode()定位:入口方法作用时机:将普通Activity转换为PIP模式生命周期影
MediaStore 使用完全解析MediaStore 是 Android 系统中用于管理多媒体内容的核心组件,它通过 ContentProvider 的方式让开发者可以安全地访问共享媒体库中的音频、视频和图像等资源。本篇会详细介绍其使用方法和工作原理。1、MediaStore 基础概念MediaStore 的几个核心概念:媒体库索引 (Index)、主要集合 (Collections)、内容 U
MediaMetadataRetriever详解MediaMetadataRetriever是Android框架中一个非常有用的类,它允许开发者从媒体文件(如音频或视频)中提取元数据和帧。它提供了多种功能,例如获取媒体信息(时长、艺术家、标题等)、提取关键帧或指定时间的帧图像等。以下是其用法的详细说明。1、添加权限在使用MediaMetadataRetriever之前,可能需要在AndroidMa
MediaProjectionManager 详解:实现屏幕录制功能在 Android 开发中,屏幕录制是一个非常实用的功能,无论是游戏录制、教学演示还是应用展示,都需要用到屏幕录制技术。Android 提供了 MediaProjectionManager 类来实现屏幕录制功能,本文将详细介绍如何使用 MediaProjectionManager 实现屏幕录制。1、MediaProjectionM

Palette的使用Palette的使用很简单,关键就是用图片(Bitmap)生成颜色调板(Palette),再从 Palette 中获取有代表性的颜色。以下是详细步骤和示例代码:1. 获取Bitmap对象必须有一个图片对象(Bitmap)。比如:2. 生成Palette对象异步生成(推荐方式):通常用 Palette 的异步生成,避免主线程阻塞:defaultColor:是当 Palette 没

Android 媒体通知终极开发指南:深入 MediaSession 与状态管理本教程将彻底剖析 Android 媒体通知系统的每个技术细节,包含完整的生命周期处理、精确的状态同步机制以及高级自定义功能的实现方案。1、核心架构深度解析1.1、MediaSessionCompat 完整初始化流程1.2、会话令牌传播机制关键路径: MediaBrowserService.onGetRoot() 返回包

CameraX 全面详解CameraX 是 Jetpack 组件之一,旨在简化相机应用的开发流程,同时解决不同厂商设备的兼容性问题。下面我将从基础到高级详细介绍如何使用 CameraX。1、核心概念1.1、Use CasesCameraX 围绕三个主要用例构建: Preview: 预览画面显示 Image Analysis: 图像分析 Image Capture: 拍摄照片1.2、Lifecycl

Surface、SurfaceView 和 SurfaceHolder 详解1、核心概念解析1.1、什么是 SurfaceSurface 是 Android 中用于图形渲染的核心类,它代表了一个可直接绘制像素的缓冲区。Surface 是生产者和消费者模式的实现,生产者(如 Camera、MediaPlayer)可以向 Surface 写入数据,消费者(如 SurfaceFlinger)则负责将数据
Android MediaRecorder 使用详解1、MediaRecorder 概述1.1、什么是 MediaRecorderMediaRecorder 是 Android 提供的一个用于录制音频和视频的类,它可以从设备的麦克风和摄像头获取数据,并将其编码为各种格式的媒体文件。1.2、MediaRecorder 的功能- 录制音频- 录制视频- 录制屏幕- 支持多种编码格式- 支持多种输出格式

Android 动效中的贝塞尔曲线1、贝塞尔曲线的基本概念贝塞尔曲线(Bézier curve)是一种用于计算机图形学的数学曲线,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)发明。它通过控制点来定义曲线的形状,是实现平滑动画效果的重要工具。工具: https://easings.net/# https://bezier.method.ac/核心概念: - 控制点:决定曲线形状的关键 p

Android Surface 与 SurfaceView 使用指南Android Surface 与 SurfaceView 使用指南。1、Surface 基础概念1.1、什么是 Surface?Surface 是 Android 系统中的一个原始绘图表面,它:代表屏幕上的一个绘图区域由屏幕合成器(SurfaceFlinger)管理提供用于绘图的 Canvas 或 OpenGL ES 上下文1.

Android Camera拍照获取Bitmap完整实现本文提供一个完整的Camera拍照并返回Bitmap的实现方案,包含权限处理、相机预览和照片捕获流程。1、基本准备在AndroidManifest.xml中添加权限2、Activity/Fragment实现代码关键点说明:使用了最新的CameraX API,比传统Camera API更简单易用。完整的权限处理流程,包括运行时权限检查和申请两种

Android SurfaceView 全面解析与实践指南1、SurfaceView 概述SurfaceView 是 Android 中一种特殊的 View,它拥有独立的 Surface,可以在非 UI 线程进行绘制操作。与普通 View 不同,SurfaceView 的绘制不会阻塞主线程,这使得它非常适合需要频繁刷新或复杂渲染的场景。核心特性: - 独立的渲染 Surface,双缓冲机制 - 支

TextureView 初探:结合 Camera 实现相机预览1、TextureView 基本概念1.1、什么是 TextureViewTextureView 是 Android 4.0(API 14)引入的一个视图类,它可以将内容流(如相机预览、视频播放)渲染到一个硬件加速的纹理上。与 SurfaceView 不同,TextureView 是一个普通的 View,可以像其他 View 一样进行变

AvatarView 详解:支持 Coil/Glide 的 Android 头像组件库社交、通讯、协作类 App 里,头像是个高频又琐碎的组件——要支持圆形 / 圆角、边框、在线状态点、首字母兜底,还要能在一个头像里塞多张图(比如群聊头像)。GetStream/avatarview-android(AvatarView)把这些都打包好了,并同时支持 Coil 与 Glide 两种图片引擎。本文从依

Android-Universal-Image-Loader 详解:Android 图片加载库的先驱与退场在 Glide、Coil、Fresco 一统天下的今天,可能很难想象 2012–2015 年 Android 图片加载的"事实标准"是另一个库——nostra13/Android-Universal-Image-Loader(简称 UIL)。它以 16.8k Star 的体量,定义了一代人对"

Paparazzi:无需真机的 Android 截图测试UI 回归是 Android 测试的老大难:单元测试测不了"长得对不对",真机截图又慢又贵还受设备碎片化折磨。Cash App(Square)开源的 Paparazzi(狗仔队)给出了优雅解法——在 JVM 上直接渲染应用界面,不需要物理设备或模拟器。它把 Android 布局引擎(含 layoutlib)跑在本机,截图快如单元测试;配合"录