2016-01-20 102 views
4

我正在向android地圖視圖添加自定義標記。這裏是我使用它的圖像。它看起來像更多的標記放置說約100整個應用程序變得緩慢。這是我正在使用的圖像。在android中使用XML繪製自定義形狀

enter image description here

而不是使用這個形象,我打算畫這個圖像作爲XML的形狀。怎麼做?

此外,我正在關注this tutorial以顯示自定義標記。這是自定義繪圖延遲應用程序?

最好的辦法是做什麼?

+0

這是否需要自動調整? – Yorrd

+0

不,我不想調整 – Zach

回答

3

這是可能的,但看起來沒有意義。因爲Google地圖只需要位圖。所以你需要創建位圖並在畫布的幫助下繪製形狀。

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> 

的代碼形狀轉換成位圖(從與地圖片段/活性)

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

dimen.xml

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

部分

結果將是未來

enter image description here

+0

以節省時間其他開發人員,誰將試圖找出這 – gio

+1

在Android Studio預覽不會正確顯示此形狀,只有建立和運行 – gio

1

最簡單的方法就是包含一個小的PNG或JPG標記。繪製速度會更快,並且不會佔用太多的空間。我不認爲你可以在xml中獲得這種形狀 - 底部的小三角形使它變硬,形狀非常有限。你可能會做到部分XML和部分圖像,但爲什麼要打擾XML呢?

相關問題