mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import { Image, Stretch } from "tns-core-modules/ui/image";
|
|
import { Label } from "tns-core-modules/ui/label";
|
|
import { LayoutBase } from "tns-core-modules/ui/layouts/layout-base";
|
|
|
|
const sources = [
|
|
{ w: 32, h: 18, src: "i32x18" },
|
|
{ w: 32, h: 32, src: "i32x32" },
|
|
{ w: 18, h: 32, src: "i18x32" }
|
|
].map(({ w, h, src }) => ({ w, h, src: `res://${src}` }));
|
|
const stretchModes: Stretch[] = ["none", "aspectFill", "aspectFit", "fill"];
|
|
const widths = [+8, 0, -8];
|
|
const heights = [+8, 0, -8];
|
|
|
|
export function navigatingTo(args) {
|
|
const variants: { src: string, stretch: Stretch, width: number, height: number }[] = [];
|
|
|
|
// Better way for cartesian product?
|
|
sources.forEach(src =>
|
|
stretchModes.forEach(stretch =>
|
|
widths.forEach(width =>
|
|
heights.forEach(height =>
|
|
variants.push({ src: src.src, stretch, width: src.w + width, height: src.h + height })))));
|
|
|
|
const grid: LayoutBase = args.object.getViewById("root");
|
|
const label: Label = args.object.getViewById("label");
|
|
let lastTap = null;
|
|
variants.forEach(({ src, stretch, width, height }) => {
|
|
const image = new Image();
|
|
image.src = src;
|
|
|
|
image.backgroundColor = "yellow";
|
|
image.width = <any>(width + "px");
|
|
image.height = <any>(height + "px");
|
|
|
|
image.stretch = stretch;
|
|
image.borderColor = "yellow";
|
|
image.margin = "1px";
|
|
(<any>image).tag = `${width} ${height} ${stretch} ${src.substr(src.lastIndexOf("/") + 1)}`;
|
|
image.addEventListener("tap", (args: any) => {
|
|
if (lastTap) {
|
|
lastTap.borderColor = "yellow";
|
|
}
|
|
label.text = args.object.tag;
|
|
args.object.borderColor = "red";
|
|
lastTap = args.object;
|
|
});
|
|
grid.addChild(image);
|
|
});
|
|
}
|