feat: slider support set max and min scale
This commit is contained in:
		| @@ -51,8 +51,8 @@ public class SliderNode extends SuperNode<RecyclerView> { | ||||
|     private String renderPageFuncId; | ||||
|     private boolean scrollable = true; | ||||
|     private String slideStyle = null; | ||||
|     private static final float MIN_SCALE = 0.5f; | ||||
|     private static final float MAX_SCALE = 1; | ||||
|     private float minScale = 0.618f; | ||||
|     private float maxScale = 1; | ||||
|  | ||||
|     public SliderNode(DoricContext doricContext) { | ||||
|         super(doricContext); | ||||
| @@ -133,9 +133,10 @@ public class SliderNode extends SuperNode<RecyclerView> { | ||||
|                         if (child.getWidth() == 0) { | ||||
|                             return; | ||||
|                         } | ||||
|                         float centerX = (child.getLeft() + child.getRight()) / 2.f; | ||||
|                         float percent = 1 - Math.abs(recyclerView.getWidth() / 2f - centerX) / recyclerView.getWidth() / 2f; | ||||
|                         float scaleFactor = MIN_SCALE + Math.abs(percent) * (MAX_SCALE - MIN_SCALE); | ||||
|                         float centerX = recyclerView.getWidth() / 2.f; | ||||
|                         float vCenterX = (child.getLeft() + child.getRight()) / 2.f; | ||||
|                         float percent = 1 - Math.abs(centerX - vCenterX) / centerX; | ||||
|                         float scaleFactor = minScale + Math.abs(percent) * (maxScale - minScale); | ||||
|                         child.setLayoutParams(lp); | ||||
|                         child.setScaleY(scaleFactor); | ||||
|                         child.setScaleX(scaleFactor); | ||||
| @@ -246,6 +247,10 @@ public class SliderNode extends SuperNode<RecyclerView> { | ||||
|             case "slideStyle": | ||||
|                 if (prop.isString()) { | ||||
|                     this.slideStyle = prop.asString().value(); | ||||
|                 } else if (prop.isObject()) { | ||||
|                     this.slideStyle = prop.asObject().getProperty("type").asString().value(); | ||||
|                     this.maxScale = prop.asObject().getProperty("maxScale").asNumber().toFloat(); | ||||
|                     this.minScale = prop.asObject().getProperty("minScale").asNumber().toFloat(); | ||||
|                 } | ||||
|                 break; | ||||
|             default: | ||||
|   | ||||
| @@ -2727,7 +2727,7 @@ var Slider = /** @class */ (function (_super) { | ||||
|     ], Slider.prototype, "bounces", void 0); | ||||
|     __decorate$9([ | ||||
|         Property, | ||||
|         __metadata$9("design:type", String) | ||||
|         __metadata$9("design:type", Object) | ||||
|     ], Slider.prototype, "slideStyle", void 0); | ||||
|     return Slider; | ||||
| }(Superview)); | ||||
|   | ||||
| @@ -2068,7 +2068,7 @@ __decorate$9([ | ||||
| ], Slider.prototype, "bounces", void 0); | ||||
| __decorate$9([ | ||||
|     Property, | ||||
|     __metadata$9("design:type", String) | ||||
|     __metadata$9("design:type", Object) | ||||
| ], Slider.prototype, "slideStyle", void 0); | ||||
| function slider(config) { | ||||
|     const ret = new Slider; | ||||
|   | ||||
| @@ -3596,7 +3596,7 @@ __decorate$9([ | ||||
| ], Slider.prototype, "bounces", void 0); | ||||
| __decorate$9([ | ||||
|     Property, | ||||
|     __metadata$9("design:type", String) | ||||
|     __metadata$9("design:type", Object) | ||||
| ], Slider.prototype, "slideStyle", void 0); | ||||
| function slider(config) { | ||||
|     const ret = new Slider; | ||||
|   | ||||
							
								
								
									
										10
									
								
								doric-js/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								doric-js/index.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -810,7 +810,15 @@ declare module 'doric/lib/src/widget/slider' { | ||||
|                 * Take effect only on iOS | ||||
|                 */ | ||||
|             bounces?: boolean; | ||||
|             slideStyle?: "zoomOut"; | ||||
|             /** | ||||
|                 * Set the effect when sliding | ||||
|                 * ZoomOut is currently supported | ||||
|                 */ | ||||
|             slideStyle?: "zoomOut" | { | ||||
|                     type: "zoomOut"; | ||||
|                     minScale: number; | ||||
|                     maxScale: number; | ||||
|             }; | ||||
|             slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>; | ||||
|             getSlidedPage(context: BridgeContext): Promise<number>; | ||||
|     } | ||||
|   | ||||
							
								
								
									
										10
									
								
								doric-js/lib/src/widget/slider.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								doric-js/lib/src/widget/slider.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -20,7 +20,15 @@ export declare class Slider extends Superview { | ||||
|      * Take effect only on iOS | ||||
|      */ | ||||
|     bounces?: boolean; | ||||
|     slideStyle?: "zoomOut"; | ||||
|     /** | ||||
|      * Set the effect when sliding | ||||
|      * ZoomOut is currently supported | ||||
|      */ | ||||
|     slideStyle?: "zoomOut" | { | ||||
|         type: "zoomOut"; | ||||
|         minScale: number; | ||||
|         maxScale: number; | ||||
|     }; | ||||
|     private getItem; | ||||
|     private renderBunchedItems; | ||||
|     slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>; | ||||
|   | ||||
| @@ -90,7 +90,7 @@ __decorate([ | ||||
| ], Slider.prototype, "bounces", void 0); | ||||
| __decorate([ | ||||
|     Property, | ||||
|     __metadata("design:type", String) | ||||
|     __metadata("design:type", Object) | ||||
| ], Slider.prototype, "slideStyle", void 0); | ||||
| export function slider(config) { | ||||
|     const ret = new Slider; | ||||
|   | ||||
| @@ -56,9 +56,12 @@ export class Slider extends Superview { | ||||
|      */ | ||||
|     @Property | ||||
|     bounces?: boolean | ||||
|  | ||||
|     /** | ||||
|      * Set the effect when sliding | ||||
|      * ZoomOut is currently supported | ||||
|      */ | ||||
|     @Property | ||||
|     slideStyle?: "zoomOut" | ||||
|     slideStyle?: "zoomOut" | { type: "zoomOut", minScale: number, maxScale: number } | ||||
|  | ||||
|     private getItem(itemIdx: number) { | ||||
|         let view = this.renderPage(itemIdx) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user