我在我的Android应用中实现了谷歌地图。我有两个与标记有关的问题。
问题1:如何获取圆形图像标记?即我想在地图标记中获得roud图像图标而不是方形图标图标?
我从特定网址获取lat,long和profiepic链接的列表,并使用Async加载它们。在Post执行我有 实现了for循环
protected void onPostExecute(String file_url)
{
for (int i = 0; i < nameList.size(); i++)
{
userName = nameList.get(i).getName();
lati = nameList.get(i).getLati();
longi = nameList.get(i).getLongi();
photoUrl = nameList.get(i).getImage();
gotoLocation(Double.parseDouble(lati), Double.parseDouble(longi), userName, photoUrl, ZOOMVALUE);
}
}
我正在使用毕加索库将图像加载到标记:
private void gotoLocation(double lat, double lng, String name, String url, float zoom)
{
final String uname = name;
curlat = lat;
curlong = lng;
Picasso.with(getActivity()).load(url).resize(100, 100).into(new Target()
{
@Override
public void onBitmapFailed(Drawable arg0)
{
markerOptions = new MarkerOptions().position(new LatLng(curlat, curlong)).icon(BitmapDescriptorFactory.fromResource(R.drawable.profilepic)).title(uname);
markerforfriends = googleMap.addMarker(markerOptions);
}
@Override
public void onBitmapLoaded(Bitmap b, LoadedFrom arg1)
{
bitmapMarker = BitmapDescriptorFactory.fromBitmap(b);
if(b != null)
{
markerOptions = new MarkerOptions().position(new LatLng(curlat, curlong)).icon(bitmapMarker).title(uname);
}
else
{
markerOptions = new MarkerOptions().position(new LatLng(curlat, curlong)).icon(BitmapDescriptorFactory.fromResource(R.drawable.profilepic)).snippet(uname);
}
markerforfriends = googleMap.addMarker(markerOptions);
}
@Override
public void onPrepareLoad(Drawable arg0)
{
}
});
}
我尝试了以下内容:
CircleOptions circle=new CircleOptions();
circle.center(ll).fillColor(Color.LTGRAY).radius(1);
googleMap.addCircle(circle);
这会圈出当前位置,但不是图像?
问题2:以上标记始终不会弹出(不稳定)?如果我引用地图它会正确显示?这可能有什么问题?是因为我使用piccasso库加载它们吗?是否有不同的方法将图像从URL加载到标记?
答案 0 :(得分:0)
这是一个问题。见这里:https://github.com/square/picasso/issues/308
根据杰克沃顿的说法,不要将Target声明为匿名,因为它会收集垃圾。例如,在您的活动中将其声明为私有。看看是否有效。
在单独的文件中:
public class DummyTarget implements Target
{
public String uname;
//etc....
@Override
public void onBitmapLoaded(Bitmap bitmap, LoadedFrom from) {
// you codes....
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
// your codes....
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}
在某处,声明它
private target = new DummyTarget();
在毕加索的电话中:
private void gotoLocation(double lat, double lng, String name, String url, float zoom)
{
final String uname = name;
curlat = lat;
curlong = lng;
// set dummy target
target.uname = uname;
// etc...
Picasso.with(getActivity()).load(url).resize(100, 100).into(target);
答案 1 :(得分:0)
你也可以加载到“this”
Picasso.with(getActivity()).load(url).resize(100, 100).into(this);
然后让当前类实现Target
public class YourClass implements Target {
private ArrayList<BitMap> bitMaps;
private void gotoLocation(double lat, double lng, String name, String url, float zoom) {
final String uname = name;
curlat = lat;
curlong = lng;
Picasso.with(getActivity()).load(url).resize(100, 100).into(this);
}
@Override
public void onBitmapFailed(Drawable arg0) {
}
@Override
public void onBitmapLoaded(Bitmap bitmap, LoadedFrom loadedFrom) {
bitMaps.add(bitmap);
}
@Override
public void onPrepareLoad(Drawable arg0) {
}
}
答案 2 :(得分:0)
解决问题1部分.. 由于我正在使用毕加索,这对我来说非常有用,可以画一个圆圈图标。
Transformation transformation = new RoundedTransformationBuilder()
.borderColor(Color.WHITE)
.borderWidthDp(3)
.cornerRadiusDp(30)
.oval(false)
.build();
使用RoundedTransformationBuilder库!
感谢https://github.com/vinc3m1/RoundedImageView的创建者!
如果他们想要与MY QUESTION 1相似的话,这对其他人有用。