Interface Class Name | Description |
TAVEditor | SDK operation entry class. |
TAVWidgetContentView | SDK gesture operation base class. |
TAVWidgetContentView will call ITAVWidgetEditViewFactory methods to create widget edit views. Currently, there are two built-in basic edit views:Interface Name | Description |
ITAVWidgetEventListener | Event interface for widget operations; widget activation, deactivation, dragging, clicking, and other events are called back through this interface. |
ITAVWidgetTouchOutsideListener | Callback when no widget is tapped. |
ITAVWidgetEditViewFactory | Factory for creating custom widget edit views. |
ITAVWidgetMoveLimitProvider | Widget move limit strategy provider. |
Method Name | Description |
setTouchable | Set whether gesture operations are enabled. |
setNoFocusGestureEnabled | Set whether widgets can be dragged directly without selecting first. |
setWidgetType | Set the types of widgets that can be operated. |
setMoveRegionRect | Set the widget dragging region. |
activeWidget | Activate the specified widget. |
resignCurrentActive | Deactivate the currently active widget. |
addWidgetEventListener | Add a widget operation event listener. |
setWidgetTouchOutsideListener | Set the callback for when no widget is tapped. |
setEditViewFactory | Set a custom widget edit view factory. If the SDK's default edit view does not meet business requirements, you can implement your own edit view. |
setSyncWithRender | Set whether widget operations synchronize with rendering. |
setMoveLimitProvider | Set the widget move limit strategy. You can specify the move limit mode and region for each widget. |
public class MyStickerEditView extends TAVStickerEditView {... your own logic// To get the vertex positions of a widget in the View, use the getVertexPoints method}
public class MyWidgetContentView extends TAVWidgetContentView {public MyWidgetContentView(Context context) {super(context);setEditViewFactory(new ITAVWidgetEditViewFactory() {@Overridepublic TAVStickerEditView createStickerEditView(TAVSticker sticker) {return new MyStickerEditView(context, sticker);}...});}}
TAVEditor editor = TAVEditorFactory.createEditor();TAVEditorConstants.PreviewParam param = new TAVEditorConstants.PreviewParam();param.videoView = FrameLayout;// Pass in custom TAVWidgetContentViewparam.contentView = new MyWidgetContentView(context);param.loopPlay = true;param.autoPlay = true;editor.initWithPreview(param);
public class MyWidgetContentView extends TAVWidgetContentView {public MyWidgetContentView(Context context) {super(context);// Add widget event listeneraddWidgetEventListener(new ITAVWidgetEventListener() {@Overridepublic void onWidgetClick(TAVWidget widget, MotionEvent event) {// Widget clicked}@Overridepublic void onWidgetTouchBegin(TAVWidget widget, MotionEvent event) {// Widget drag started}@Overridepublic void onWidgetTouchEnd(TAVWidget widget, MotionEvent event) {// Widget drag ended}@Overridepublic void onWidgetAdjust(TAVWidget widget, TAVWidgetOperationMode operationMode) {// Widget is being dragged}@Overridepublic void onWidgetActive(TAVWidget widget) {// Widget activated for editing}@Overridepublic void onWidgetResign(TAVWidget widget) {// Widget deactivated}});}}
@Overrideprotected boolean shouldShowEditView() {// Add your own display logicreturn super.shouldShowEditView();}@Overrideprotected void updateWidgetEditViewVisibility() {if (null != currentEditView && null != currentWidget) {final boolean shouldShow = shouldShowEditView();// Modify TAVWidgetEditView visibility based on display conditions}}
Interface Name | Description |
positionInterceptor | Widget position interception. |
rotateInterceptor | Widget rotation angle interception. |
scaleInterceptor | Widget scale interception. |
positionInterceptor method to achieve position snapping during movement:@Overrideprotected PointF positionInterceptor(float x, float y) {PointF translation = new PointF(x, y);PointF[] previewPoints = currentEditView.computeVertexPoints(translation);float previewCenterX = (previewPoints[0].x + previewPoints[2].x) / 2f;float previewCenterY = (previewPoints[0].y + previewPoints[2].y) / 2f;float viewCenterX = getWidth() / 2f;float viewCenterY = getHeight() / 2f;float deltaX = viewCenterX - previewCenterX;float deltaY = viewCenterY - previewCenterY;// Snap when within 10 pixelsif (Math.abs(deltaX) <= 10) {translation.x += deltaX;}if (Math.abs(deltaY) <= 10) {translation.y += deltaY;}return translation;}
文档反馈