gpt4 book ai didi

android - 使用 XML 在 android 中绘制自定义形状

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:25:18 24 4
gpt4 key购买 nike

我正在向 android map View 添加自定义标记。这是我为它使用的图像。看起来随着更多标记的放置,比如大约 100,整个应用程序变得越来越慢。这是我为此使用的图像。

enter image description here

我打算不使用此图像,而是将此图像绘制为 XML 中的形状。怎么做?

我也在关注this tutorial显示自定义标记。这个自定义绘图是否延迟了应用程序?

最好的方法是什么?

最佳答案

这是可能的,但看起来没有意义。因为谷歌地图只需要位图。因此,您需要创建位图并在 Canvas 的帮助下绘制形状。

marker.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item
android:width="20dp"
android:height="20dp"
android:top="10dp">
<rotate
android:fromDegrees="45"
android:pivotX="75%"
android:pivotY="40%">
<shape>
<solid android:color="#fe696d" />
</shape>
</rotate>
</item>

<item
android:width="@dimen/marker_width"
android:height="@dimen/marker_height"
android:bottom="8dp">
<shape>
<solid android:color="#4b4b4b" />
<corners
android:topLeftRadius="@dimen/marker_corner_radius"
android:topRightRadius="4dp" />
</shape>

</item>


<item
android:width="32dp"
android:height="26dp"
android:bottom="4dp"
android:top="16dp">
<shape>
<solid android:color="#fe696d" />
<corners
android:bottomLeftRadius="@dimen/marker_corner_radius"
android:bottomRightRadius="@dimen/marker_corner_radius" />
</shape>

</item>

dimen.xml

<resources>
<dimen name="marker_corner_radius">4dp</dimen>
<dimen name="marker_height">40dp</dimen>
<dimen name="marker_width">32dp</dimen>
</resources>

将形状转换为位图的部分代码(来自带有 Map 的 fragment/Activity )

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.marker, null);
Canvas canvas = new Canvas();
int width = getResources().getDimensionPixelOffset(R.dimen.marker_width);
int height = getResources().getDimensionPixelOffset(R.dimen.marker_height);
drawable.setBounds(0, 0, width, height);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
drawable.draw(canvas);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap);
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().icon(bitmapDescriptor).position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

下一个就是结果

enter image description here

关于android - 使用 XML 在 android 中绘制自定义形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34911391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com