簡體   English   中英

使用XML在android中繪制自定義形狀

[英]Draw a custom shape in android using XML

我正在為android地圖視圖添加自定義標記。 這是我正在使用它的圖像。看起來像放置更多的標記大約100整個應用程序變慢。 這是我正在使用的圖像。

在此輸入圖像描述

我計划將此圖像繪制為XML中的形狀,而不是使用此圖像。 怎么做?

我也按照本教程顯示自定義標記。 這個自定義繪圖是否延遲了應用程序?

什么是最好的方法呢?

這是可能的,但看起來沒有意義。 因為Google Map只需要位圖。 所以你需要創建位圖並借助畫布繪制你的形狀。

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的片段/活動)

@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));
}

結果將是下一個

在此輸入圖像描述

最簡單的方法就是包含一個小的png或jpg標記。 畫畫會更快,不會占用太多空間。 我不認為你可以在xml中得到那個形狀 - 底部的小三角形使它變硬,形狀真的有限。 您可以在部分xml和部分圖像中執行此操作,但那么為什么要使用xml呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM