通过XML旋转绘制与标记上GoogleMap的V2工作 [英] Rotating drawable via XML not working with marker on GoogleMap V2
问题描述
我想用旋转绘制的一个XML文件,然后显示在地图上。
我喜欢这一点。
//...//
mo1.position(myLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.myxmldrawable));
map.addMarker(MO1);
//...//
XML文件:
<?XML版本=1.0编码=UTF-8&GT?;
<旋转的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:fromDegrees =180
机器人:toDegrees =180
机器人:pivotX =50%
机器人:pivotY =50%
机器人:可绘制=@绘制/针/>
如果我跑了code在以下异常捕获:
07-16 13:10:18.347:W / System.err的(26084):显示java.lang.NullPointerException
07-16 13:10:18.347:W / System.err的(26084):在maps.ah.bm.a(来源不明)
07-16 13:10:18.347:W / System.err的(26084):在maps.ah.bm.a(来源不明)
07-16 13:10:18.347:W / System.err的(26084):在maps.ah.an.a(来源不明)
07-16 13:10:18.347:W / System.err的(26084):在bgc.onTransact(的SourceFile:167)
07-16 13:10:18.347:W / System.err的(26084):在android.os.Binder.transact(Binder.java:326)
07-16 13:10:18.347:W / System.err的(26084):在com.google.android.gms.maps.internal.IGoogleMapDelegate $ A $ a.addMarker(来源不明)
07-16 13:10:18.347:W / System.err的(26084):在com.google.android.gms.maps.GoogleMap.addMarker(来源不明)
07-16 13:10:18.347:W / System.err的(26084):在hu.illion.ayt.activities.MapAct $ GetBolyakAsync.onPostExecute(MapAct.java:1177)
07-16 13:10:18.347:W / System.err的(26084):在hu.illion.ayt.activities.MapAct $ GetBolyakAsync.onPostExecute(MapAct.java:1)
07-16 13:10:18.347:W / System.err的(26084):在android.os.AsyncTask.finish(AsyncTask.java:631)
07-16 13:10:18.347:W / System.err的(26084):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
07-16 13:10:18.347:W / System.err的(26084):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)
07-16 13:10:18.357:W / System.err的(26084):在android.os.Handler.dispatchMessage(Handler.java:99)
07-16 13:10:18.357:W / System.err的(26084):在android.os.Looper.loop(Looper.java:137)
07-16 13:10:18.357:W / System.err的(26084):在android.app.ActivityThread.main(ActivityThread.java:4867)
07-16 13:10:18.357:W / System.err的(26084):在java.lang.reflect.Method.invokeNative(本机方法)
07-16 13:10:18.357:W / System.err的(26084):在java.lang.reflect.Method.invoke(Method.java:511)
07-16 13:10:18.357:W / System.err的(26084):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007)
07-16 13:10:18.357:W / System.err的(26084):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
07-16 13:10:18.357:W / System.err的(26084):在dalvik.system.NativeStart.main(本机方法)
的错误时抛出点的地方,我想标记添加到地图就行了。
重要提示:我有一个成功的巴纽绘图资源即可。我的使用XML定义绘制问题只(旋转...)
所以,这是什么? GoogleMap的不能处理XML绘项目还是什么?
E D I T:
好了,所以之后我尝试了建议,并认为这是不工作,(仍然有nullptr除外),我刚才说的挫折感我登录了什么一切。
和结果非常奇怪,我。
logcat的结果是:
07-17 22:11:11.410:I / myResource(22971):myResource是:2130837627
07-17 22:11:11.410:I / myBitmapDescriptor(22971):myBitmapDescriptor是:com.google.android.gms.maps.model.BitmapDescriptor@41b24230
07-17 22:11:11.410:I / myLatLng(22971):myLatLng是OK
07-17 22:11:11.410:I / myMarker(22971):myMarker是OK
07-17 22:11:11.410:I / myMarker(22971):myMarker还行
07-17 22:11:11.410:I /图(22971):地图是OK
看到了吗?凡事都有参考。都不是NULL,然而仍然NullPointerException异常。
而code是:
的MarkerOptions myMarker =新的MarkerOptions();
经纬度myLatLng =新经纬度(Double.valueOf(myHashMap.get(LAT2)),Double.valueOf(myHashMap.get(lng2))); 如果(myHashMap.get(point_type)。等于(1)){ 位图图标= BitmapFactory.de codeResource(MapAct.this.getResources(),R.drawable.ellenfel); mo1.position(kezdoLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.startbolya));
myMarker.position(myLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.zsuri0));
}其他{
mo1.position(kezdoLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.endbolya)); INT myResource = getResources()则getIdentifier(zsuri180,可拉伸,getPackageName())。 如果(myResource == 0)
{
Log.i(myResource,myResource为空);
}
其他
{
Log.i(myResource,myResource是:+ myResource +);
} BitmapDescriptor myBitmapDescriptor = BitmapDescriptorFactory.fromResource(myResource); 如果(myBitmapDescriptor == NULL)
{ Log.i(myBitmapDescriptor,myBitmapDescriptor为空);
}
其他
{
Log.i(myBitmapDescriptor,myBitmapDescriptor是:+ myBitmapDescriptor);
}
如果(myLatLng == NULL)
{
Log.i(myLatLng,myLatLng为NULL);
}
其他
{
Log.i(myLatLng,myLatLng是OK);
} myMarker.position(myLatLng); 如果(myMarker == NULL)
{
Log.i(myMarker,myMarker为NULL);
}
其他
{
Log.i(myMarker,myMarker是OK);
}
myMarker.icon(myBitmapDescriptor);
如果(myMarker == NULL)
{
Log.i(myMarker,myMarker为NULL);
}
其他
{
Log.i(myMarker,myMarker还行);
} 如果(图== NULL)
{
Log.i(地图,地图是空);
}
其他
{
Log.i(地图,地图是OK);
}
} map.addMarker(myMarker);
您不能使用非PNG资源作为标记
的图标。
您可以但是这样的可绘制
加载到内存中,它绘制成位图
使用帆布
并发送位图
到 MarkerOptions.icon
使用 BitmapDescriptorFactory .fromBitmap(...)
。
I would like to rotate a drawable with an xml-file, then show it on the map.
I do like this.
//...//
mo1.position(myLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.myxmldrawable));
map.addMarker(mo1);
//...//
XML file:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="180"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%"
android:drawable="@drawable/pin"/>
If i ran the code the following exception caught:
07-16 13:10:18.347: W/System.err(26084): java.lang.NullPointerException
07-16 13:10:18.347: W/System.err(26084): at maps.ah.bm.a(Unknown Source)
07-16 13:10:18.347: W/System.err(26084): at maps.ah.bm.a(Unknown Source)
07-16 13:10:18.347: W/System.err(26084): at maps.ah.an.a(Unknown Source)
07-16 13:10:18.347: W/System.err(26084): at bgc.onTransact(SourceFile:167)
07-16 13:10:18.347: W/System.err(26084): at android.os.Binder.transact(Binder.java:326)
07-16 13:10:18.347: W/System.err(26084): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.addMarker(Unknown Source)
07-16 13:10:18.347: W/System.err(26084): at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
07-16 13:10:18.347: W/System.err(26084): at hu.illion.ayt.activities.MapAct$GetBolyakAsync.onPostExecute(MapAct.java:1177)
07-16 13:10:18.347: W/System.err(26084): at hu.illion.ayt.activities.MapAct$GetBolyakAsync.onPostExecute(MapAct.java:1)
07-16 13:10:18.347: W/System.err(26084): at android.os.AsyncTask.finish(AsyncTask.java:631)
07-16 13:10:18.347: W/System.err(26084): at android.os.AsyncTask.access$600(AsyncTask.java:177)
07-16 13:10:18.347: W/System.err(26084): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
07-16 13:10:18.357: W/System.err(26084): at android.os.Handler.dispatchMessage(Handler.java:99)
07-16 13:10:18.357: W/System.err(26084): at android.os.Looper.loop(Looper.java:137)
07-16 13:10:18.357: W/System.err(26084): at android.app.ActivityThread.main(ActivityThread.java:4867)
07-16 13:10:18.357: W/System.err(26084): at java.lang.reflect.Method.invokeNative(Native Method)
07-16 13:10:18.357: W/System.err(26084): at java.lang.reflect.Method.invoke(Method.java:511)
07-16 13:10:18.357: W/System.err(26084): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
07-16 13:10:18.357: W/System.err(26084): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
07-16 13:10:18.357: W/System.err(26084): at dalvik.system.NativeStart.main(Native Method)
The excpetion points to the line where i would like to add the marker to the map.
Important: I have succeed with .png drawables. I have problem with xml defined drawable only (rotation...)
So what is this? GoogleMap cannot handle XML drawables or what?
E D I T :
Okay, so after i tried the suggestion, and saw it is not working, (still got nullptr exception) i just said what the heck i log out EVERYTHING.
And the results are very strange to me.
Logcat result:
07-17 22:11:11.410: I/myResource(22971): myResource is: 2130837627
07-17 22:11:11.410: I/myBitmapDescriptor(22971): myBitmapDescriptor is: com.google.android.gms.maps.model.BitmapDescriptor@41b24230
07-17 22:11:11.410: I/myLatLng(22971): myLatLng is OK
07-17 22:11:11.410: I/myMarker(22971): myMarker is OK
07-17 22:11:11.410: I/myMarker(22971): myMarker is still OK
07-17 22:11:11.410: I/map(22971): map is OK
See? Everything has reference. None is NULL, yet the NullPointerException remains. And the code is:
MarkerOptions myMarker = new MarkerOptions();
LatLng myLatLng = new LatLng(Double.valueOf(myHashMap.get("lat2")), Double.valueOf(myHashMap.get("lng2")));
if (myHashMap.get("point_type").equals("1")) {
Bitmap icon = BitmapFactory.decodeResource(MapAct.this.getResources(), R.drawable.ellenfel);
mo1.position(kezdoLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.startbolya));
myMarker.position(myLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.zsuri0));
} else {
mo1.position(kezdoLatLng).icon(BitmapDescriptorFactory.fromResource(R.drawable.endbolya));
int myResource = getResources().getIdentifier("zsuri180","drawable", getPackageName());
if(myResource==0)
{
Log.i("myResource", "myResource is null");
}
else
{
Log.i("myResource", "myResource is: "+myResource+"");
}
BitmapDescriptor myBitmapDescriptor = BitmapDescriptorFactory.fromResource(myResource);
if(myBitmapDescriptor==null)
{
Log.i("myBitmapDescriptor", "myBitmapDescriptor is null");
}
else
{
Log.i("myBitmapDescriptor", "myBitmapDescriptor is: "+myBitmapDescriptor);
}
if(myLatLng==null)
{
Log.i("myLatLng", "myLatLng is NULL");
}
else
{
Log.i("myLatLng", "myLatLng is OK");
}
myMarker.position(myLatLng);
if(myMarker==null)
{
Log.i("myMarker", "myMarker is NULL");
}
else
{
Log.i("myMarker", "myMarker is OK");
}
myMarker.icon(myBitmapDescriptor);
if(myMarker==null)
{
Log.i("myMarker", "myMarker is NULL");
}
else
{
Log.i("myMarker", "myMarker is still OK");
}
if(map==null)
{
Log.i("map", "map is NULL");
}
else
{
Log.i("map", "map is OK");
}
}
map.addMarker(myMarker);
You cannot use non-PNG resources as a Marker
's icon.
You can however load such Drawable
into memory, draw it into a Bitmap
using Canvas
and send that Bitmap
to MarkerOptions.icon
using BitmapDescriptorFactory.fromBitmap(...)
.
这篇关于通过XML旋转绘制与标记上GoogleMap的V2工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!