You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android自定义VideoView设置尺寸无效且遇类加载异常求助

问题排查与解决方案

先帮你拆解两个核心问题:致命ClassNotFoundException崩溃和VideoView尺寸不生效,一步步来解决:


一、先解决致命异常(ClassNotFoundException)

从你的日志和代码细节来看,崩溃有两个明确的原因:

1. 包名不一致导致类找不到

异常日志里显示你的应用进程是com.nati_1.ImageGallerySwitching_v6,但代码和XML布局里的包名却是com.nati_1.ImageGallerySwitching_v8——系统在错误的包路径下找自定义View,肯定找不到。你需要:

  • 检查AndroidManifest.xml里的包名,确保和代码的包路径完全一致;
  • 修正XML布局里自定义View的引用路径,保证和实际包名匹配。

2. 非静态内部类无法在XML中直接实例化

你的MyVideoView是VideoActivity的非静态内部类,Android布局 inflater没办法直接创建它的实例(非静态内部类依赖外部Activity的实例才能存在)。解决方法二选一:

  • 把MyVideoView改成静态内部类,在类定义前加static关键字:
    public static class MyVideoView extends VideoView {
        // 保留原有的成员变量和方法逻辑
    }
    
  • 或者把MyVideoView单独提取成一个独立的Java类文件(比如MyVideoView.java),放在同一个包下,这样XML里的引用可以简化成com.nati_1.ImageGallerySwitching_v8.MyVideoView。

二、解决VideoView尺寸不生效的问题

你调用video1.setVideoSize(70,70)后看不到变化,主要有这几个问题:

1. 自定义方法和系统方法重名,逻辑冲突

系统自带的VideoView本身就有setVideoSize(int width, int height)方法,作用是设置视频的解码分辨率,而你自定义的同名方法是用来控制View的显示尺寸——这会造成逻辑混淆,系统可能优先执行系统方法而非你的自定义逻辑。建议把你的方法改名,比如改成setViewDisplaySize(int width, int height)。

2. 布局约束限制了View的尺寸

你的XML里给MyVideoView设置了layout_width="0dp"、layout_height="0dp",并且用ConstraintLayout的约束让它完全绑定父布局的上下左右,这种情况下,你自定义的onMeasure逻辑会被ConstraintLayout的布局规则覆盖。调整方案:

  • 如果想要固定尺寸,直接把layout_width和layout_height改成具体的dp值(比如70dp),而不是0dp;
  • 如果要保留约束布局,需要修改onMeasure逻辑,让自定义尺寸优先级更高:
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mVideoWidth > 0 && mVideoHeight > 0) {
            // 把dp转换成像素,保证不同设备显示一致
            float density = getResources().getDisplayMetrics().density;
            int pixelWidth = (int) (mVideoWidth * density);
            int pixelHeight = (int) (mVideoHeight * density);
            setMeasuredDimension(pixelWidth, pixelHeight);
        } else {
            // 没有设置自定义尺寸时,用默认测量逻辑
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
    

3. 触发布局重新测量

设置完尺寸后,记得调用video1.requestLayout(),强制View重新执行测量和布局流程,确保尺寸变化生效。


额外调试建议

先注释掉尺寸设置的代码,确保异常问题解决后视频能正常播放,再逐步加入尺寸逻辑调试,这样更容易定位问题。

内容的提问来源于stack exchange,提问作者Nati Levi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:53