diff --git a/Android/doric/src/main/java/pub/doric/shader/ViewNode.java b/Android/doric/src/main/java/pub/doric/shader/ViewNode.java index 52bdeb8e..7af8d289 100644 --- a/Android/doric/src/main/java/pub/doric/shader/ViewNode.java +++ b/Android/doric/src/main/java/pub/doric/shader/ViewNode.java @@ -28,6 +28,7 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; +import pub.doric.Doric; import pub.doric.DoricContext; import pub.doric.DoricRegistry; import pub.doric.async.AsyncResult; @@ -184,17 +185,6 @@ public abstract class ViewNode extends DoricContextHolder { setBgColor(prop.asNumber().toInt()); } break; - case "rotation": - if (isAnimating()) { - addAnimator(ObjectAnimator.ofFloat( - this, - name, - getRotation(), - prop.asNumber().toFloat())); - } else { - setRotation(prop.asNumber().toFloat()); - } - break; case "onClick": final String functionId = prop.asString().value(); view.setOnClickListener(new View.OnClickListener() { @@ -248,6 +238,103 @@ public abstract class ViewNode extends DoricContextHolder { ); } break; + case "translationX": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getTranslationX(), + prop.asNumber().toFloat())); + } else { + setTranslationX(prop.asNumber().toFloat()); + } + break; + case "translationY": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getTranslationY(), + prop.asNumber().toFloat())); + } else { + setTranslationY(prop.asNumber().toFloat()); + } + break; + case "scaleX": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getScaleX(), + prop.asNumber().toFloat())); + } else { + setScaleX(prop.asNumber().toFloat()); + } + case "scaleY": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getScaleY(), + prop.asNumber().toFloat())); + } else { + setScaleY(prop.asNumber().toFloat()); + } + case "pivotX": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getPivotX(), + prop.asNumber().toFloat())); + } else { + setPivotX(prop.asNumber().toFloat()); + } + break; + case "pivotY": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getPivotY(), + prop.asNumber().toFloat())); + } else { + setPivotY(prop.asNumber().toFloat()); + } + break; + case "rotation": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getRotation(), + prop.asNumber().toFloat())); + } else { + setRotation(prop.asNumber().toFloat()); + } + break; + case "rotationX": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getRotationX(), + prop.asNumber().toFloat())); + } else { + setRotationX(prop.asNumber().toFloat()); + } + break; + case "rotationY": + if (isAnimating()) { + addAnimator(ObjectAnimator.ofFloat( + this, + name, + getRotationY(), + prop.asNumber().toFloat())); + } else { + setRotationY(prop.asNumber().toFloat()); + } + break; default: break; } @@ -392,16 +479,6 @@ public abstract class ViewNode extends DoricContextHolder { return DoricUtils.px2dp(getNodeView().getHeight()); } - @DoricMethod - public void setRotation(float rotation) { - getNodeView().setRotation(rotation * 180); - } - - @DoricMethod - public float getRotation() { - return getNodeView().getRotation() / 180; - } - @DoricMethod protected void setWidth(float width) { if (mLayoutParams.width >= 0) { @@ -473,4 +550,94 @@ public abstract class ViewNode extends DoricContextHolder { public float getCorners() { return DoricUtils.px2dp((int) requireDoricLayer().getCornerRadius()); } + + @DoricMethod + public void setTranslationX(float v) { + getNodeView().setTranslationX(DoricUtils.dp2px(v)); + } + + @DoricMethod + public float getTranslationX() { + return DoricUtils.px2dp((int) getNodeView().getTranslationX()); + } + + @DoricMethod + public void setTranslationY(float v) { + getNodeView().setTranslationY(DoricUtils.dp2px(v)); + } + + @DoricMethod + public float getTranslationY() { + return DoricUtils.px2dp((int) getNodeView().getTranslationY()); + } + + @DoricMethod + public void setScaleX(float v) { + getNodeView().setScaleX(v); + } + + @DoricMethod + public float getScaleX() { + return getNodeView().getScaleX(); + } + + @DoricMethod + public void setScaleY(float v) { + getNodeView().setScaleY(v); + } + + @DoricMethod + public float getScaleY() { + return getNodeView().getScaleY(); + } + + @DoricMethod + public void setRotation(float rotation) { + getNodeView().setRotation(rotation * 180); + } + + @DoricMethod + public float getRotation() { + return getNodeView().getRotation() / 180; + } + + @DoricMethod + public void setRotationX(float rotation) { + getNodeView().setRotationX(rotation * 180); + } + + @DoricMethod + public float getRotationX() { + return getNodeView().getRotationX() / 180; + } + + @DoricMethod + public void setRotationY(float rotation) { + getNodeView().setRotationY(rotation * 180); + } + + @DoricMethod + public float getRotationY() { + return getNodeView().getRotationY() / 180; + } + + @DoricMethod + public void setPivotX(float v) { + getNodeView().setPivotX(v * getNodeView().getWidth()); + } + + @DoricMethod + public float getPivotX() { + return getNodeView().getPivotX() / getNodeView().getWidth(); + } + + @DoricMethod + public void setPivotY(float v) { + getNodeView().setPivotY(v * getNodeView().getHeight()); + } + + @DoricMethod + public float getPivotY() { + return getNodeView().getPivotY() / getNodeView().getHeight(); + } } diff --git a/js-framework/src/ui/view.ts b/js-framework/src/ui/view.ts index 0281d84c..9ce21633 100644 --- a/js-framework/src/ui/view.ts +++ b/js-framework/src/ui/view.ts @@ -42,6 +42,30 @@ export interface IView { layoutConfig?: LayoutConfig onClick?: Function identifier?: string + + /**++++++++++transform++++++++++*/ + translationX?: number + + translationY?: number + + scaleX?: number + + scaleY?: number + /** + * float [0,..1] + */ + pivotX?: number + /** + * float [0,..1] + */ + pivotY?: number + + rotation?: number + + rotationX?: number + + rotationY?: number + /**----------transform----------*/ } @@ -61,9 +85,6 @@ export abstract class View implements Modeling, IView { @Property bgColor?: Color | GradientColor - @Property - rotation?: number - @Property corners?: number | { leftTop?: number; rightTop?: number; leftBottom?: number; rightBottom?: number } @@ -288,6 +309,35 @@ export abstract class View implements Modeling, IView { getRotation(context: BridgeContext) { return this.nativeChannel(context, 'getRotation')() as Promise } + + /**++++++++++transform++++++++++*/ + @Property + translationX?: number + + @Property + translationY?: number + + @Property + scaleX?: number + + @Property + scaleY?: number + + @Property + pivotX?: number + + @Property + pivotY?: number + + @Property + rotation?: number + + @Property + rotationX?: number + + @Property + rotationY?: number + /**----------transform----------*/ } export abstract class Superview extends View {