Skip to content

Commit fb07e36

Browse files
committed
fix: cluster images fix (scale)
1 parent de23e3a commit fb07e36

File tree

4 files changed

+24
-21
lines changed

4 files changed

+24
-21
lines changed

plugin/platforms/android/java/com/akylas/carto/additions/AKClusterElementBuilder.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ public class AKClusterElementBuilder extends ClusterElementBuilder {
4141
public interface Interface {
4242
VectorElement buildClusterElement(MapPos pos, VectorElementVector nElements);
4343
}
44+
45+
public AKClusterElementBuilder(float screenScale) {
46+
super();
47+
this.screenScale = screenScale;
48+
}
49+
private float screenScale;
4450
Interface inter = null;
4551
public void setInterface(Interface inter) {
4652
this.inter = inter;
@@ -140,24 +146,25 @@ public VectorElement nativeBuildClusterElement(MapPos pos, VectorElementVector e
140146
StyleBuilder styleBuilder = null;
141147
Bitmap cBitmap = null;
142148
if (markerBitmap != null || textColor != null) {
143-
android.graphics.Bitmap canvasBitmap;
144-
if (markerBitmap != null) {
145-
canvasBitmap = markerBitmap.copy(android.graphics.Bitmap.Config.ARGB_8888, true);
146-
} else {
147-
canvasBitmap = android.graphics.Bitmap.createBitmap(markerSize, markerSize, android.graphics.Bitmap.Config.ARGB_8888);
148-
}
149+
int size = int)(markerSize * scale);
150+
android.graphics.Bitmap canvasBitmap = android.graphics.Bitmap.createBitmap(size, size, android.graphics.Bitmap.Config.ARGB_8888);
149151
android.graphics.Canvas canvas = new android.graphics.Canvas(canvasBitmap);
150-
152+
canvas.scale(screenScale, screenScale);
151153
Paint paint = AKClusterElementBuilder.paint;
154+
Rect bounds = AKClusterElementBuilder.tempRect;
155+
if (markerBitmap != null) {
156+
bounds.set(0,0, markerBitmap.getWidth(), markerBitmap.getHeight());
157+
Rect dst = AKClusterElementBuilder.tempRect2;
158+
dst.set(0,0, markerSize, markerSize);
159+
canvas.drawBitmap(markerBitmap, bounds, dst, paint);
160+
}
152161

153162
paint.setTextAlign(Paint.Align.CENTER);
154163
paint.setTextSize(textSize);
155164
if (typeface != null) {
156165
paint.setTypeface(typeface);
157166
}
158-
Typeface typeface = paint.getTypeface();
159167
String text = Integer.toString(nbElements);
160-
Rect bounds = AKClusterElementBuilder.tempRect;
161168
paint.getTextBounds(text, 0, text.length(), bounds);
162169

163170
if (textColor != null) {
@@ -166,8 +173,8 @@ public VectorElement nativeBuildClusterElement(MapPos pos, VectorElementVector e
166173
paint.setColor(Color.WHITE);
167174
}
168175

169-
float x = canvasBitmap.getWidth() / 2;
170-
float y = canvasBitmap.getHeight() / 2 + bounds.height()/2;
176+
float x = markerSize / 2;
177+
float y = markerSize / 2 + bounds.height()/2;
171178

172179
canvas.drawText(text, x, y, paint);
173180
cBitmap = BitmapUtils.createBitmapFromAndroidBitmap(canvasBitmap);

plugin/platforms/ios/src/AkClusterElementBuilder.mm

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,10 @@ -(NTVectorElement*)buildClusterElement:(NTMapPos *)mapPos elements:(NTVectorElem
5656
if (!markerStyle) {
5757
NTBitmap* markerBitmap;
5858
if (self.markerImage || self.textColor) {
59-
CGSize size;
59+
CGSize size = CGSizeMake(self.markerSize, self.markerSize);
60+
UIGraphicsBeginImageContextWithOptions(size, false, 0);
6061
if(self.markerImage) {
61-
size = self.markerImage.size;
62-
} else {
63-
size = CGSizeMake(self.markerSize, self.markerSize);
64-
}
65-
UIGraphicsBeginImageContext(size);
66-
if(self.markerImage) {
67-
[self.markerImage drawAtPoint:CGPointMake(0, 0)];
62+
[self.markerImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
6863
}
6964

7065
NSMutableParagraphStyle* style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];

src/layers/cluster.android.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Font } from '@nativescript/core';
1+
import { Font, Screen } from '@nativescript/core';
22
import { Color } from '@nativescript/core/color';
33
import { nativeColorProperty, nativeFontProperty, nativeImageProperty } from '..';
44
import { MapPos, fromNativeMapPos } from '../core';
@@ -17,7 +17,7 @@ export class ClusterElementBuilder extends BaseNative<com.akylas.carto.additions
1717
@nativeProperty bbox: boolean;
1818
buildClusterElement?: (position: MapPos, elements: VectorElementVector) => BaseVectorElement<any, any> | com.carto.vectorelements.VectorElement;
1919
createNative(options: ClusterElementBuilderOptions) {
20-
const result = new com.akylas.carto.additions.AKClusterElementBuilder();
20+
const result = new com.akylas.carto.additions.AKClusterElementBuilder(Screen.mainScreen.scale);
2121
if (!!options.buildClusterElement) {
2222
result.setInterface(
2323
new com.akylas.carto.additions.AKClusterElementBuilder.Interface({

src/typings/ak.carto.android.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ declare namespace com {
7070
export namespace carto {
7171
export namespace additions {
7272
export class AKClusterElementBuilder extends com.carto.layers.ClusterElementBuilder {
73+
public constructor(screenScale: number);
7374
public static class: java.lang.Class<AKClusterElementBuilder>;
7475
public buildClusterElement(param0: com.carto.core.MapPos, param1: com.carto.vectorelements.VectorElementVector): com.carto.vectorelements.VectorElement;
7576
public setShape(param0: string): void;

0 commit comments

Comments
 (0)