feat: slider support set max and min scale
This commit is contained in:
parent
fd5994e270
commit
c05c169dd7
@ -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