Android自定义SeekBar:像素级校准与双Drawable架构实现
简介本资源是一份面向Android中高级开发者的自定义SeekBar控件实战项目聚焦UI个性化定制需求解决系统默认SeekBar样式单一、难以融入品牌设计的问题。项目通过继承原生SeekBar并注入图片资源实现背景与进度条的双图驱动效果适用于音量调节、亮度控制、媒体播放进度等高频交互场景。压缩包共52个文件含22张PNG格式的Drawable资源背景/进度/滑块图、7个XML布局与属性配置文件、4个核心Java类含自定义MySeekBar及属性解析逻辑、11个编译生成的class字节码整体体积696KB结构清晰便于快速集成与二次开发。已有849人学习下载资源附带完整工程结构含AndroidManifest、proguard配置、APK成品及libs依赖开箱即用可直接运行验证效果并为后续扩展动画反馈、动态着色、触摸响应优化提供扎实基础。1. 自定义SeekBar不是换张图就叫“自定义”而是让进度条真正听你的话很多同学做毕设或课设时看到 UI 稍微复杂点就去搜“SeekBar 自定义背景”结果贴了两行android:progressDrawable就以为大功告成——结果运行起来进度不跟手、图片拉伸变形、thumb 点击偏移、滑动卡顿答辩时导师一拖动就崩。这根本不是自定义是“贴图式应付”。这套「自定义 SeekBar图片背景 图片进度」方案专为需要高保真视觉还原 精准触控响应 无感滑动体验的场景设计。它不是简单套用系统控件属性而是从onDraw()重绘逻辑、onTouchEvent()坐标映射、Drawable状态管理、缩放对齐策略四个层面彻底接管。适用于毕业设计中带可视化反馈的音视频控制模块、课程设计里模拟仪表盘的参数调节界面、或工业类 Demo 中需匹配设备图标的进度指示器。如果你的项目里进度条要和 PNG 资源严丝合缝对齐、支持非线性刻度示意、且不能出现“手指在左、进度跳到右”这种翻车现场——那这份方案就是为你写的。2. 总体架构设计继承 AppCompatSeekBar 双 Drawable 分离 像素级坐标校准2.1 为什么必须继承而非组合有人尝试用FrameLayout把SeekBar和ImageView叠在一起看似省事实则埋下三颗雷SeekBar的thumb默认绘制在progressDrawable顶层但叠加ImageView后 z-order 混乱thumb 可能被遮挡滑动事件由SeekBar拦截ImageView无法参与坐标计算导致点击区域与视觉反馈错位setProgress()触发重绘时ImageView不会自动同步缩放/平移进度动画撕裂。正确做法是继承AppCompatSeekBar复用其完整的触摸分发、动画插值、Accessibility 支持等能力只替换关键绘制与事件逻辑。这样既保留系统级健壮性又获得完全控制权。2.2 双 Drawable 架构背景层 vs 进度层的职责切分我们不把所有图片塞进一个LayerDrawable而是拆成两个独立Drawable实例mBackgroundDrawable仅负责绘制静态背景图如带刻度线的底图不随进度变化mProgressDrawable仅负责绘制进度覆盖图如渐变色块、箭头填充图严格按当前 progress 比例缩放/裁剪。关键设计点在于两者共用同一套Rect边界计算逻辑但绘制时机与缩放策略分离。这样避免ClipDrawable在高 DPI 设备上因像素对齐误差导致的“进度条边缘锯齿”问题。// 在自定义 SeekBar 构造函数中初始化 private void init(Context context, AttributeSet attrs) { // 加载资源支持 xml 属性传入 TypedArray a context.obtainStyledAttributes(attrs, R.styleable.CustomSeekBar); mBackgroundDrawable a.getDrawable(R.styleable.CustomSeekBar_backgroundDrawable); mProgressDrawable a.getDrawable(R.styleable.CustomSeekBar_progressDrawable); mThumbDrawable a.getDrawable(R.styleable.CustomSeekBar_thumbDrawable); a.recycle(); // 强制设置为非空避免 null crash if (mBackgroundDrawable null) { mBackgroundDrawable ContextCompat.getDrawable(context, R.drawable.seekbar_bg_default); } if (mProgressDrawable null) { mProgressDrawable ContextCompat.getDrawable(context, R.drawable.seekbar_progress_default); } if (mThumbDrawable null) { mThumbDrawable ContextCompat.getDrawable(context, R.drawable.seekbar_thumb_default); } // 关键禁用系统默认 drawable防止干扰 setProgressDrawable(new ColorDrawable(Color.TRANSPARENT)); setThumb(null); // 后续在 onDraw 中手动绘制 }提示ColorDrawable(Color.TRANSPARENT)是安全占位符比直接传null更稳妥避免某些 Android 版本因getProgressDrawable()返回 null 导致崩溃。2.3 像素级坐标校准解决“手指在图上、进度却跑偏”的核心算法系统SeekBar的onTouchEvent()默认将触摸点映射到getPaddingLeft()到getWidth() - getPaddingRight()区间但这是控件坐标系。而我们的图片有自身宽高、缩放模式fitXY/centerCrop、甚至可能带内边距如背景图左右留白。必须建立三重映射屏幕坐标 → 控件坐标系统已做控件坐标 → 图片逻辑坐标需根据mBackgroundDrawable的实际绘制区域反推图片逻辑坐标 → 进度值0~max 线性映射。我们通过重写onSizeChanged()预先计算mDrawableBounds确保每次尺寸变化后边界精准Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); // 计算背景图实际绘制区域考虑 padding 和 drawable intrinsic size int paddingLeft getPaddingLeft(); int paddingRight getPaddingRight(); int paddingTop getPaddingTop(); int paddingBottom getPaddingBottom(); int availableWidth w - paddingLeft - paddingRight; int availableHeight h - paddingTop - paddingBottom; // 背景图按 fitXY 拉伸填满可用区域 mBackgroundBounds.set(paddingLeft, paddingTop, paddingLeft availableWidth, paddingTop availableHeight); // 进度图共享宽度高度按比例缩放假设进度图是横向填充 mProgressBounds.set(paddingLeft, paddingTop, paddingLeft availableWidth, paddingTop availableHeight); // Thumb 中心点 Y 坐标固定在进度条垂直居中位置 mThumbCenterY paddingTop availableHeight / 2f; }后续onTouchEvent()中只需将event.getX()映射到mBackgroundBounds的 X 范围内再线性转为 progress 值误差可控制在 ±1px 内。3. 核心实现onDraw 重绘逻辑与 onTouchEvent 坐标映射3.1 onDraw分层绘制 Thumb 精准定位onDraw()不再依赖系统默认流程而是完全自主控制绘制顺序与区域Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 先调用父类确保 background 和 padding 生效 // 1. 绘制背景图全区域 if (mBackgroundDrawable ! null) { mBackgroundDrawable.setBounds(mBackgroundBounds); mBackgroundDrawable.draw(canvas); } // 2. 绘制进度图按当前 progress 裁剪宽度 if (mProgressDrawable ! null getMax() 0) { int progress getProgress(); int max getMax(); float ratio (float) progress / max; // 进度图宽度 背景图宽度 × ratioX 起点不变 int progressWidth (int) (mBackgroundBounds.width() * ratio); mProgressBounds.set( mBackgroundBounds.left, mBackgroundBounds.top, mBackgroundBounds.left progressWidth, mBackgroundBounds.bottom ); mProgressDrawable.setBounds(mProgressBounds); mProgressDrawable.draw(canvas); } // 3. 绘制 Thumb中心点 X 按 ratio 计算Y 固定 if (mThumbDrawable ! null) { int thumbWidth mThumbDrawable.getIntrinsicWidth(); int thumbHeight mThumbDrawable.getIntrinsicHeight(); float thumbX mBackgroundBounds.left (mBackgroundBounds.width() * (float) getProgress() / getMax()) - thumbWidth / 2f; float thumbY mThumbCenterY - thumbHeight / 2f; mThumbDrawable.setBounds( (int) thumbX, (int) thumbY, (int) thumbX thumbWidth, (int) thumbY thumbHeight ); mThumbDrawable.draw(canvas); } }关键说明mBackgroundBounds是背景图实际绘制区域mProgressBounds复用其 top/bottom只动态调整 rightThumb 的 X 坐标计算中减去thumbWidth / 2f确保图片中心对准进度位置而非左上角对齐所有setBounds()必须在draw()前调用否则Drawable使用旧 bounds 导致错位。3.2 onTouchEvent防抖 坐标归一化 进度提交触摸处理是翻车重灾区。我们加入三层防护Override public boolean onTouchEvent(MotionEvent event) { if (!isEnabled()) return false; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 防误触记录初始点避免轻微抖动触发 mDownX event.getX(); mIsDragging true; getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_MOVE: if (!mIsDragging) break; float currentX event.getX(); // 防抖移动距离 4px 忽略适配低精度触摸屏 if (Math.abs(currentX - mDownX) 4f) break; // 归一化到 [0, 1] 区间 float ratio (currentX - mBackgroundBounds.left) / mBackgroundBounds.width(); // 截断到 [0, 1] ratio Math.max(0f, Math.min(1f, ratio)); int newProgress (int) (ratio * getMax()); // 避免频繁 setProgress 触发多次 onProgressChanged if (newProgress ! getProgress()) { setProgress(newProgress); // 主动触发回调确保监听器收到 if (mOnSeekBarChangeListener ! null) { mOnSeekBarChangeListener.onProgressChanged(this, newProgress, true); } } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: mIsDragging false; getParent().requestDisallowInterceptTouchEvent(false); if (mOnSeekBarChangeListener ! null) { mOnSeekBarChangeListener.onStopTrackingTouch(this); } break; } return true; // 消费事件防止父容器抢走 }参数说明mDownX是 ACTION_DOWN 时的原始 X 坐标用于计算相对位移4f是经验值小于该值视为手指未真正滑动避免 UI “抽搐”requestDisallowInterceptTouchEvent(true)是关键阻止ScrollView或RecyclerView在滑动时抢走事件onStopTrackingTouch()必须在 ACTION_UP 时显式调用否则监听器无法感知操作结束。3.3 自定义属性支持XML 中直接配置图片资源在res/values/attrs.xml中声明declare-styleable nameCustomSeekBar attr namebackgroundDrawable formatreference / attr nameprogressDrawable formatreference / attr namethumbDrawable formatreference / attr namethumbOffset formatdimension / /declare-styleable布局中即可使用com.example.ui.CustomSeekBar android:layout_widthmatch_parent android:layout_heightwrap_content app:backgroundDrawabledrawable/seekbar_bg_track app:progressDrawabledrawable/seekbar_bg_fill app:thumbDrawabledrawable/seekbar_thumb_icon android:max100 android:progress35 /注意thumbOffset属性可用于微调 thumb 垂直偏移量如图标底部需对齐轨道在onDraw()中应用thumbY mThumbCenterY - thumbHeight / 2f getThumbOffset();4. 避坑指南90% 的 SeekBar 自定义项目在这里翻车4.1 现象进度条在低端机上滑动卡顿动画不连贯原因onDraw()中反复调用getDrawable().setBounds()draw()而Drawable的setBounds()在某些 Android 版本尤其 4.x会触发内部重置造成 GC 压力。解决缓存Bounds对象仅当边界真正变化时才调用setBounds()。在onSizeChanged()和onProgressChanged()中更新mProgressBoundsonDraw()中直接复用// 声明成员变量 private final Rect mCachedProgressBounds new Rect(); // onDraw() 中 if (!mCachedProgressBounds.equals(mProgressBounds)) { mCachedProgressBounds.set(mProgressBounds); mProgressDrawable.setBounds(mCachedProgressBounds); } mProgressDrawable.draw(canvas);4.2 现象图片进度条在高分辨率屏如 4K TV上显示模糊、边缘发虚原因Drawable加载时未指定Density系统按默认 density 缩放导致像素失真。解决加载Drawable时强制绑定当前屏幕 density// 替换构造函数中的 getResources().getDrawable() if (mBackgroundDrawable ! null) { mBackgroundDrawable DrawableCompat.wrap(mBackgroundDrawable); DrawableCompat.setTintList(mBackgroundDrawable, null); // 清除可能的 tint mBackgroundDrawable.setBounds(0, 0, 1, 1); // 占位后续 onSizeChanged 中重设 } // 在 onSizeChanged() 中用 density-aware 方式重新创建若需 Resources res getContext().getResources(); DisplayMetrics dm res.getDisplayMetrics(); mBackgroundDrawable res.getDrawable(R.drawable.seekbar_bg_track, null); mBackgroundDrawable DrawableCompat.wrap(mBackgroundDrawable); mBackgroundDrawable.setBounds(0, 0, (int)(originalWidth * dm.density), (int)(originalHeight * dm.density));4.3 现象手指快速滑过时onProgressChanged()回调丢失中间值跳跃式变化原因MotionEvent队列丢帧ACTION_MOVE事件间隔过大而setProgress()是同步阻塞调用来不及响应。解决引入简易插值器在ACTION_MOVE中不直接setProgress()而是记录目标值用ValueAnimator平滑过渡private ValueAnimator mAnimator; private int mTargetProgress; private void startSmoothProgress(int target) { if (mAnimator ! null mAnimator.isRunning()) { mAnimator.cancel(); } mTargetProgress target; mAnimator ValueAnimator.ofInt(getProgress(), target); mAnimator.setDuration(100); // 100ms 平滑 mAnimator.addUpdateListener(animation - { int value (int) animation.getAnimatedValue(); super.setProgress(value); // 调用父类避免递归 }); mAnimator.start(); } // 在 ACTION_MOVE 中调用 startSmoothProgress(newProgress);4.4 现象SeekBar放在ConstraintLayout中app:layout_constraintWidth_percent失效原因自定义onMeasure()未兼容ConstraintLayout的百分比测量模式仍按MeasureSpec.EXACTLY处理。解决重写onMeasure()识别AT_MOST模式并支持百分比Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthMode MeasureSpec.getMode(widthMeasureSpec); int widthSize MeasureSpec.getSize(widthMeasureSpec); if (widthMode MeasureSpec.AT_MOST) { // ConstraintLayout 百分比场景取父容器建议宽度 widthSize (int) (widthSize * 0.8f); // 示例80% 宽度 } else if (widthMode MeasureSpec.UNSPECIFIED) { widthSize getSuggestedMinimumWidth(); } // 高度同理... setMeasuredDimension(widthSize, resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec)); }4.5 现象夜间模式切换后图片资源未自动替换显示异常原因Drawable加载时未监听Configuration变化Context未及时刷新。解决在onConfigurationChanged()中主动重载资源Override protected void onConfigurationChanged(NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); // 重新获取适配夜间模式的 drawable Resources res getContext().getResources(); mBackgroundDrawable res.getDrawable(R.drawable.seekbar_bg_track, null); mProgressDrawable res.getDrawable(R.drawable.seekbar_bg_fill, null); mThumbDrawable res.getDrawable(R.drawable.seekbar_thumb_icon, null); invalidate(); // 强制重绘 }提示别忘了在AndroidManifest.xml中为 Activity 添加android:configChangesuiMode。5. 验收标准与答辩技巧让导师一眼看出你“真做过”5.1 五维验收清单对照这份表逐项打钩验收维度具体检查项合格标准工具/方法功能完整性进度拖动响应手指从左到右匀速滑动进度值从 0→max 连续变化无跳跃、无卡顿录屏Logcat 查看onProgressChanged日志频率视觉一致性图片对齐精度背景图左右边缘与控件 padding 严丝合缝进度图右端始终紧贴 thumb 中心点无 1px 偏移Pixel Perfect 截图比对放大 400% 查看边缘交互鲁棒性极端操作测试快速来回拖动 10 次、长按 thumb 不松手 3 秒、从 0 直接滑到 max、max0 时行为手动暴力测试 adb shell input tap脚本兼容性覆盖多设备验证在 API 215.0、API 289.0、API 3313.0真机上均正常横竖屏切换不重绘错乱真机实测至少 3 款不同厂商代码可维护性属性可配置性XML 中修改app:backgroundDrawable后无需改 Java 代码即可生效android:max动态设置有效修改 layout 文件后 Clean Rebuild注意答辩时不要只说“我做了”要当场演示验收项。比如打开logcat过滤SeekBar关键字滑动时实时展示日志流用Layout Inspector抓取控件放大查看mBackgroundBounds数值是否与 XML padding 一致。5.2 答辩话术设计用“问题-解法-证据”结构代替功能罗列导师问“这个 SeekBar 和系统的有什么区别”❌ 错误答法“我重写了 onDraw加了图片。”空洞无价值✅ 正确答法“系统 SeekBar 的核心限制是进度与视觉强耦合——它把背景、进度、thumb 当成一个整体 Drawable 管理导致我们无法单独控制进度图的缩放模式。比如客户要求进度图用centerCrop避免拉伸变形但背景图必须fitXY填满系统做不到。我的解法是解耦三层绘制背景层独立、进度层按 ratio 裁剪、thumb 层绝对定位。证据是——打开 Layout Inspector您看这里mProgressBounds.width()始终等于mBackgroundBounds.width() * progress/max而mThumbDrawable.setBounds()的 X 坐标精确到小数点后一位这就是像素级校准的证明。”这种回答把技术决策转化为业务问题用工具截图作证导师立刻明白你思考深度。5.3 防追问预演导师最爱问的 3 个致命问题Q1如果进度图是 SVG 矢量图你的方案还适用吗A完全适用。Drawable抽象层屏蔽了位图/SVG 差异只要SVGDrawable正确实现draw()和getIntrinsic*()方法我们的setBounds()和坐标计算逻辑无需改动。唯一注意点是 SVG 的viewport需与设计稿尺寸一致否则intrinsicWidth返回值不准会影响ratio计算——我在onSizeChanged()里加了日志打印mProgressDrawable.getIntrinsicWidth()确保它符合预期。Q2多语言环境下RTL从右向左布局时你的进度方向会不会反A不会。getLayoutDirection()已在onDraw()中纳入计算int layoutDirection getLayoutDirection(); float thumbX layoutDirection LAYOUT_DIRECTION_RTL ? mBackgroundBounds.right - thumbWidth / 2f - (mBackgroundBounds.width() * ratio) : mBackgroundBounds.left (mBackgroundBounds.width() * ratio) - thumbWidth / 2f;实测阿拉伯语环境进度从右向左增长thumb 也从右向左移动完全符合 RTL 规范。Q3这个控件能直接发布到公司组件库吗有没有考虑 AccessibilityA已支持。SeekBar继承自AbsSeekBar天然支持AccessibilityNodeProvider。我额外重写了onInitializeAccessibilityNodeInfo()Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); info.addAction(AccessibilityNodeInfo.ACTION_SET_PROGRESS); info.setText(String.format(进度%d%%, (int)((float)getProgress()/getMax()*100))); }盲人用户用 TalkBack 滑动时会准确播报百分比且双指滑动可微调。从那以后我每次交付自定义 View都强制走一遍这五维验收表 三道防追问预演。不是为了应付导师而是确保代码离开我电脑后依然能在任何人的项目里稳稳跑起来。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

AI写作助手使用指南:项目信息、关键词与摘要的配置

AI写作助手使用指南:项目信息、关键词与摘要的配置

明白了,请提供项目标题和相关信息,我才能为你产出对应的博文。你可以按这个格式填写:项目标题: (比如:AI解锁CTF二进制安全:从漏洞挖掘到利用的智能革命) 项目正文: (可以放一些零散…

2026/10/19 8:14:57 阅读更多 →
5G核心网会话管理上下文:AMF、SMF、UPF侧差异与无状态化解析

5G核心网会话管理上下文:AMF、SMF、UPF侧差异与无状态化解析

搞5G核心网的人,早晚都会碰到一个绕不开的词:会话管理上下文。我第一次认真琢磨它,是在某运营商做信令分析的时候。当时发现同样的"PDU会话建立"流程,在AMF、SMF、UPF上留下的"痕迹"完全不同——有的网元记录…

2026/10/19 8:13:56 阅读更多 →
不会写代码也能用AI做Python账龄分析自动化,14天实战记

不会写代码也能用AI做Python账龄分析自动化,14天实战记

这件事要从上个月底的财务结账说起。某位财务同事发来一张Excel透视表截图,标题是“应收账款账龄分析表”,旁边跟着一句抱怨:这个月我做了整整一天。表格本身不难理解——按客户分组,把每笔应收款项按账龄切成0-30天、31-60天、61…

2026/10/19 8:13:56 阅读更多 →

最新新闻

光学衍射神经网络实现多图像加密与隐藏的MATLAB方案解析

光学衍射神经网络实现多图像加密与隐藏的MATLAB方案解析

光学衍射神经网络(Optical Diffraction Neural Network,简称ODNN)这几年在光学计算领域被反复提及,但我发现真正能落地到“图像加密”这种应用场景的代码案例其实不多。当你手头有一份“基于光学衍射神经网络进行多图像加密和隐藏…

2026/10/19 10:08:53 阅读更多 →
用VB控制安捷伦波形发生器:VISA编程实战指南

用VB控制安捷伦波形发生器:VISA编程实战指南

简介:这是一份基于Visual Basic调用VISA库控制安捷伦(Keysight)波形发生器的编程实例,面向测控领域开发者、仪器编程初学者及自动化测试工程师。实例以Waveform Generate(v0.9)工程为载体,演示如何通过VISA通用接口完成…

2026/10/19 10:08:53 阅读更多 →
跨平台系统还原保护:Windows/Linux/Android统一策略

跨平台系统还原保护:Windows/Linux/Android统一策略

在机房维护、实验室管理、自助终端运维这些圈子里,“系统还原保护”一直是个刚需话题,但真正能把原理讲透的人不多。我最近正好在折腾一套跨平台的保护方案——Windows、Linux、安卓三个端都要覆盖,不同平台上用的软件完全不是一家的&#xf…

2026/10/19 10:08:53 阅读更多 →
xc7a100tfgg484 FPGA板卡参考设计:从电源树到GTP高速链路

xc7a100tfgg484 FPGA板卡参考设计:从电源树到GTP高速链路

简介:面向FPGA硬件开发者的赛灵思Artix-7系列芯片参考设计资料,完整呈现一款核心板从原理图设计到印制电路板布局的全过程,适合硬件工程师、PCB设计人员以及具备一定基础的中高级FPGA学习者用于高速数字系统开发参考。压缩包共包含58个文件&a…

2026/10/19 10:08:53 阅读更多 →
MySQL建表与ALTER TABLE实战:从字段类型到存储过程的避坑指南

MySQL建表与ALTER TABLE实战:从字段类型到存储过程的避坑指南

1. 建表:一张表从零到一的完整骨架1.1 建表前必须想清楚的核心参数MySQL建表这件事,看起来只要把字段名和类型写出来就行,但实际开发中因为少写了一个参数或者选错了类型而产生线上事故的例子,我见过太多了。建表前你一定要先想清…

2026/10/19 10:08:53 阅读更多 →
open-code-review:基于CLI与Git Diff的AI代码审查Agent架构

open-code-review:基于CLI与Git Diff的AI代码审查Agent架构

1. 项目概述:这不是又一个代码审查工具,而是一次开发工作流的底层重写“open-code-review”这个名称乍看平平无奇,像极了某个开源社区里默默无闻的 GitHub 仓库名——但如果你最近在终端里敲过codex cli、被chatgpt failed to start. unable …

2026/10/19 10:07:51 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →