feat:Android support corners animation

This commit is contained in:
pengfei.zhou 2019-11-29 16:01:50 +08:00
parent d56556fb4a
commit 8b22f3e362
4 changed files with 53 additions and 9 deletions

View File

@ -151,4 +151,11 @@ public class DoricLayer extends FrameLayout {
}; };
} }
public float getCornerRadius() {
if (mCornerRadii != null) {
return mCornerRadii[0];
}
return 0;
}
} }

View File

@ -215,7 +215,15 @@ public abstract class ViewNode<T extends View> extends DoricContextHolder {
break; break;
case "corners": case "corners":
if (prop.isNumber()) { if (prop.isNumber()) {
requireDoricLayer().setCornerRadius(DoricUtils.dp2px(prop.asNumber().toFloat())); if (isAnimating()) {
addAnimator(ObjectAnimator.ofFloat(
this,
name,
getCorners(),
prop.asNumber().toFloat()));
} else {
setCorners(prop.asNumber().toFloat());
}
} else if (prop.isObject()) { } else if (prop.isObject()) {
JSValue lt = prop.asObject().getProperty("leftTop"); JSValue lt = prop.asObject().getProperty("leftTop");
JSValue rt = prop.asObject().getProperty("rightTop"); JSValue rt = prop.asObject().getProperty("rightTop");
@ -454,4 +462,15 @@ public abstract class ViewNode<T extends View> extends DoricContextHolder {
public void setBgColor(int color) { public void setBgColor(int color) {
mView.setBackgroundColor(color); mView.setBackgroundColor(color);
} }
@DoricMethod
public void setCorners(float corner) {
requireDoricLayer().setCornerRadius(DoricUtils.dp2px(corner));
getNodeView().invalidate();
}
@DoricMethod
public float getCorners() {
return DoricUtils.px2dp((int) requireDoricLayer().getCornerRadius());
}
} }

View File

@ -4,10 +4,10 @@ import { title, colors, box } from "./utils";
function thisLabel(str: string) { function thisLabel(str: string) {
return text({ return text({
text: str, text: str,
width: 100, width: 60,
height: 50, height: 50,
bgColor: colors[4], bgColor: colors[0],
textSize: 20, textSize: 15,
textColor: Color.WHITE, textColor: Color.WHITE,
layoutConfig: layoutConfig().exactly(), layoutConfig: layoutConfig().exactly(),
}) })
@ -31,6 +31,7 @@ class AnimatorDemo extends Panel {
view.x = view.y = 0 view.x = view.y = 0
view.rotation = 0 view.rotation = 0
view.bgColor = colors[2] view.bgColor = colors[2]
view.corners = 0
}, },
duration: 1500, duration: 1500,
}).then(() => { }).then(() => {
@ -40,7 +41,9 @@ class AnimatorDemo extends Panel {
}) })
} }
}), }),
thisLabel('Move X').apply({ ]).apply({ space: 10 } as IHLayout),
hlayout([
thisLabel('X').apply({
onClick: () => { onClick: () => {
animate(this)({ animate(this)({
animations: () => { animations: () => {
@ -51,7 +54,7 @@ class AnimatorDemo extends Panel {
}) })
} }
}), }),
thisLabel('Move Y').apply({ thisLabel('Y').apply({
onClick: () => { onClick: () => {
animate(this)({ animate(this)({
animations: () => { animations: () => {
@ -62,8 +65,6 @@ class AnimatorDemo extends Panel {
}) })
} }
}), }),
]).apply({ space: 10 } as IHLayout),
hlayout([
thisLabel('Width').apply({ thisLabel('Width').apply({
onClick: () => { onClick: () => {
animate(this)({ animate(this)({
@ -110,6 +111,20 @@ class AnimatorDemo extends Panel {
}); });
} }
}), }),
thisLabel('Corner').apply({
onClick: () => {
animate(this)({
animations: () => {
if (typeof view.corners === 'number') {
view.corners += 10
} else {
view.corners = 10
}
},
duration: 1000,
});
}
}),
]).apply({ space: 10 } as IHLayout), ]).apply({ space: 10 } as IHLayout),
] ]
).apply({ space: 10 } as IVLayout), ).apply({ space: 10 } as IVLayout),

View File

@ -15,7 +15,10 @@
*/ */
import { Panel } from "../ui/panel" import { Panel } from "../ui/panel"
import { takeLet } from "../pattern/candies" import { takeLet } from "../pattern/candies"
/**
* Only supports x,y,width,height,corner(just for four corners),rotation,bgColor,
* @param panel @see Panel
*/
export function animate(panel: Panel) { export function animate(panel: Panel) {
return (args: { return (args: {
animations: () => void, animations: () => void,