視頻通話view旋轉流程

1、com/android/incallui/InCallOrientationEventListener.java

手機設備旋轉時回調的方法:

@Override
public void onOrientationChanged(int rotation) {
    if (rotation == OrientationEventListener.ORIENTATION_UNKNOWN) {
        return;
    }

    final int orientation = toScreenOrientation(rotation);

    if (orientation != SCREEN_ORIENTATION_UNKNOWN && sCurrentOrientation != orientation) {
        sCurrentOrientation = orientation;
        InCallPresenter.getInstance().onDeviceOrientationChange(sCurrentOrientation);
    }
}
2、com/android/incallui/InCallPresenter.java
public void onDeviceOrientationChange(int orientation) {
    Log.d(this, "onDeviceOrientationChange: orientation= " + orientation);

    if (mCallList != null) {
        mCallList.notifyCallsOfDeviceRotation(orientation);
    } else {
        Log.w(this, "onDeviceOrientationChange: CallList is null.");
    }

    // Notify listeners of device orientation changed.
    for (InCallOrientationListener listener : mOrientationListeners) {
        listener.onDeviceOrientationChanged(orientation);
    }
}
3、com/android/incallui/VideoCallPresenter.java

回調onDeviceOrientationChanged:

@Override
public void onDeviceOrientationChanged(int orientation) {
    mDeviceOrientation = orientation;

    VideoCallUi ui = getUi();
    if (ui == null) {
        Log.e(this, "onDeviceOrientationChanged: VideoCallUi is null");
        return;
    }

    Point previewDimensions = ui.getPreviewSize();
    if (previewDimensions == null) {
        return;
    }
    Log.d(this, "onDeviceOrientationChanged: orientation=" + orientation + " size: "
            + previewDimensions);
    changePreviewDimensions(previewDimensions.x, previewDimensions.y);

    ui.setPreviewRotation(mDeviceOrientation);
}
4、com/android/incallui/VideoCallFragment.java

調用setPreviewRotation方法:

@Override
public void setPreviewRotation(int orientation) {
    Log.d(this, "setPreviewRotation: orientation=" + orientation);
    if (sPreviewSurface != null) {
        TextureView preview = sPreviewSurface.getTextureView();

        if (preview == null ) {
            return;
        }

        preview.setRotation(orientation);
    }
}

這裏的setRotation其實就是View類的一個方法,用於旋轉一個子view。




















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章