android - 子类化 SurfaceView 并覆盖 onDraw() 以更改 SurfaceView 参数以生成所需大小的预览

标签 android view preview surfaceview ondraw

我已经将 SurfaceView 子类化并在 Activity 的 onCreate 中实例化它。生成了预览,但控件永远不会进入 onDraw(),它在 SurfaceView 的子类中被重写。这是为什么?

class ActivityClass extends Activity{

    onCreate(){

        mPreview = new Preview(this);
        setContentView(mPreview);
    }
    public void startPreview(){

        rec = new MediaRecorder();
        rec.setVideoSource();.......
        rec.setPreviewDisplay(mPreview.getSurfaceHolder.getSurface());
    } 
}

class Preview extends SurfaceView implements SurfaceHolder.Callback{

    SurfaceHolder mHolder;

    public Preview(Context context){
        super(context);
        mHolder = getHolder();     
        mHolder.addCallback(this);      
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
        bringToFront();//this is not
        invalidate();//making a difference
    }

    SurfaceHolder getSurfaceHolder(){

        return mHolder;
    }
    //Surface callback methods implemented here
}

在Surface上绘制预览之前,实现的话是不是应该把控制权交给onDraw回调?

因为 onDraw 回调告诉 Android 框架‘你不绘制 View 。我已经实现了,我会画出来的。我对吗?

那为什么控件没有进入onDraw()呢?请帮忙。

最佳答案

你只需添加

setWillNotDraw(false)

给构造函数。

完成了..:)

关于android - 子类化 SurfaceView 并覆盖 onDraw() 以更改 SurfaceView 参数以生成所需大小的预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340847/

相关文章:

Android 应用程序在使用 proguard 发布时崩溃

java - 我无法从 sqlite 解析日期。解析异常 : Unparseable date

ios - 应用程序在 Xcode 9 的 iphone X 模拟器中不占据整个屏幕

preview - 如何在 Xcode 15 #Preview 中使用 let 常量

android - 如何从 Android 上的 URL 页面获取预览缩略图?

android - takeScreenshot 总是为 uiautomator 返回 false

ios - Xcode ios 多个 View 上的背景图像

javascript - BackboneJs - 模型或集合是否应该具有 View 知识

Android Camera2 API 预览有时会失真

android - 将 AutoCompleteTextView 改为 ActionBar 中的 SearchView