通过 mView 变量 获取 surfaceView
时间: 2023-08-27 11:03:52 浏览: 45
如果您有一个 View 对象,想要获取其包含的 SurfaceView 对象,您可以使用以下代码:
```java
if (mView instanceof SurfaceView) {
SurfaceView surfaceView = (SurfaceView) mView;
SurfaceHolder surfaceHolder = surfaceView.getHolder();
Surface surface = surfaceHolder.getSurface();
}
```
首先,判断 mView 是否是 SurfaceView 的实例。如果是,将 mView 强制转换为 SurfaceView 对象,并使用 getHolder() 方法获取 SurfaceHolder 对象。最后,通过 SurfaceHolder 对象的 getSurface() 方法获取 Surface 对象。
同样地,建议在 SurfaceView 的 Callback 监听器中获取 Surface 对象,以确保在正确的时机获取到可用的 Surface。
相关问题
通过mView变量 update surfaceflinger
mView 变量代表的是 View 对象,而 SurfaceFlinger 是 Android 系统中的一个系统级服务,用于管理屏幕显示。因此,mView 变量无法直接更新 SurfaceFlinger。
如果您想要更新屏幕显示,可以尝试使用 SurfaceView 或 TextureView。SurfaceView 提供了一个基于 Surface 的可绘制区域,可以在后台线程中进行绘制,并将绘制结果提交到 SurfaceFlinger 进行显示。TextureView 则提供了一个基于 OpenGL ES 的可绘制区域,可以使用 OpenGL ES 进行绘制,并将绘制结果提交到 SurfaceFlinger 进行显示。
以下是一个使用 SurfaceView 更新屏幕显示的简单示例代码:
```java
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
new Thread(new Runnable() {
@Override
public void run() {
Canvas canvas = surfaceHolder.lockCanvas();
// 在 canvas 上进行绘制操作
surfaceHolder.unlockCanvasAndPost(canvas);
}
}).start();
```
这段代码在后台线程中获取 SurfaceView 的 Canvas 对象,并在 Canvas 上进行绘制操作。绘制完成后,使用 SurfaceHolder 的 unlockCanvasAndPost() 方法提交绘制结果。SurfaceHolder 会将绘制结果传递给 SurfaceFlinger 进行显示。
请注意,这只是一个简单的示例代码。实际使用时,您需要根据具体需求进行更加复杂的绘制操作,并处理好线程同步、Surface 生命周期等问题。
flink SQL获取oracle通过dataGuard备库的数据
要在Flink SQL中获取Oracle通过DataGuard备库的数据,你可以使用以下步骤:
1. 首先,在Oracle主库上创建一个物化视图,该视图将数据同步到备库上。可以使用以下语句创建物化视图:
```
CREATE MATERIALIZED VIEW mv_name
AS SELECT * FROM table_name@db_link;
```
其中,`mv_name` 是物化视图的名称,`table_name` 是要同步的表的名称,`db_link` 是指向备库的数据库链接名称。
2. 然后,在Flink SQL中使用以下语句查询物化视图:
```
SELECT * FROM mv_name;
```
这将返回备库上的数据。
需要注意的是,如果你使用的是Flink SQL的批处理模式,你需要使用Oracle的`DBMS_MVIEW`包手动刷新物化视图。如果你使用的是Flink SQL的流处理模式,则可以使用Flink的定时器来定期刷新物化视图。