第一次未加载带有毕加索的地图标记点图像

迈克尔·朱古斯·克里斯托弗M.

我正在使用自定义标记实现android Mapview。我正在使用毕加索将图像加载到标记视图中。当我第一次启动该应用程序时,它会向我显示所有标记,但是只有一个标记已使用毕加索从数据库中加载,其他标记未从数据库中加载,它们仅向我显示了默认的地图标记图钉。但是,当我转到上一个活动并返回MapsActivity时,它将向我显示使用毕加索从数据库加载的所有标记。

这是我的PicassoMarker课

public class PicassoMarker implements Target {
Marker mMarker;

    PicassoMarker(Marker marker) {
        mMarker = marker;
    }

    @Override
    public int hashCode() {
        return mMarker.hashCode();
    }

    @Override
    public boolean equals(Object o) {
        if(o instanceof PicassoMarker) {
            Marker marker = ((PicassoMarker) o).mMarker;
            return mMarker.equals(marker);
        } else {
            return false;
        }
    }

    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap));
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
        //mMarker.setIcon(BitmapDescriptorFactory.fromResource(R.mipmap.here));
    }
}

这是MapsActivity中的方法

public void plotMarkers(ArrayList<MyMarker> markers) {
    if(markers.size() > 0) {
        for (MyMarker myMarker : markers)
        {
            markerOption = new MarkerOptions().position(new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude()));
            location_marker = mMap.addMarker(markerOption);
            target = new PicassoMarker(location_marker);
            Picasso.with(MapsActivity.this).load(myMarker.getmIcon()).resize(84, 125).into(target);
            mMarkersHashMap.put(location_marker, myMarker);

            i = getIntent();
            if(i.getBooleanExtra("maps", true)) {
                buttonNavigasi.setVisibility(View.VISIBLE);

                location_marker.setTitle(i.getStringExtra("nama"));
                dest = new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude());
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(dest, 16));
            }
            else {
                mMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());
            }
        }
    }
}

这是怎么了

谢谢。

AL。

好的,所以我设法重现了您所遇到的问题,并找到了造成您问题的原因。在您提供的代码中,请注意以下行MapsActivity

target = new PicassoMarker(location_marker);

我假设您正在使用全局单个变量target我添加了一些日志,并设法看到唯一使用加载图像的标记Picassofor循环中最后一个 Marker

究其原因是因为,每次进入循环,的值target更改为新的 PicassoMarker,你有,使得onBitmapLoaded该的以前 PicassoMarker你有没有用,因为它不再有目标。:(

所以我要做的是,我只添加了一个List<Target>变量(确保您不要忘记对其进行初始化)来存储targets的实例在我之前指定的行中,我刚刚添加了将的值存储target到列表中的代码,如下所示:

Target target = new PicassoMarker(location_marker);
targets.add(target);

在我的模拟器上对其进行了测试,并将图像加载到所有Markers上。

编辑

这是我用来重现您的错误,然后对其进行修改以使其起作用的活动代码:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    Intent i;
    MarkerOptions markerOption;
    List<Target> targets;
    HashMap<Marker, MyMarker> mMarkersHashMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        mMarkersHashMap = new HashMap<>();
        targets = new ArrayList<>();

        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        // LatLng sydney = new LatLng(-34, 151);
        // mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        // mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        ArrayList<MyMarker> markers = new ArrayList<MyMarker>();
        MyMarker m1 = new MyMarker(new LatLng(-34, 151.1), "https://developer.chrome.com/extensions/examples/api/idle/idle_simple/sample-128.png");
        MyMarker m2 = new MyMarker(new LatLng(-34, 151.2), "https://developer.chrome.com/extensions/examples/api/idle/idle_simple/sample-128.png");
        MyMarker m3 = new MyMarker(new LatLng(-34, 151.3), "https://developer.chrome.com/extensions/examples/api/idle/idle_simple/sample-128.png");

        markers.add(m1);
        markers.add(m2);
        markers.add(m3);

        plotMarkers(markers);

        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                Log.d(MapsActivity.class.getSimpleName(), "MARKER Longitude: " + marker.getPosition().longitude);
                return false;
            }
        });
    }

    public void plotMarkers(ArrayList<MyMarker> markers) {
        if (markers.size() > 0) {
            for (MyMarker myMarker : markers) {

                markerOption = new MarkerOptions().position(new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude()));
                Marker location_marker = mMap.addMarker(markerOption);

                Target target = new PicassoMarker(location_marker);
                targets.add(target);
                Picasso.with(MapsActivity.this).load(myMarker.getmIcon()).resize(84, 125).into(target);

                mMarkersHashMap.put(location_marker, myMarker);

                i = getIntent();
                if (i.getBooleanExtra("maps", true)) {
                    // buttonNavigasi.setVisibility(View.VISIBLE);

                    location_marker.setTitle(i.getStringExtra("nama"));
                    LatLng dest = new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude());
                    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(dest, 8f));
                } else {
                    Log.d(MapsActivity.class.getSimpleName(), "In else{}");
                    // mMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());
                }
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

未加载JavaScript代码(仅第一次)

来自分类Dev

毕加索不缓存第一次加载,但第二次没问题

来自分类Dev

避免第一次加载图像

来自分类Dev

谷歌地图infobubble动态内容不会在第一次单击标记时加载

来自分类Dev

没有第一次加载的数据

来自分类Dev

第一次加载页面

来自分类Dev

模态显示第一次加载为空,第二次未加载

来自分类Dev

模态显示第一次加载为空,第二次未加载

来自分类Dev

我第一次创建了Spring Maven项目css,js,图像未加载我已经尝试了这里给出的所有解决方案仍然无法正常工作

来自分类Dev

不想在jqGrid中加载页面后第一次显示排序图标

来自分类Dev

解析推送第一次无法加载通知图标

来自分类Dev

毕加索未加载图像

来自分类Dev

滑行会在第一次加载时缩小图像

来自分类Dev

图像在第一次画廊加载时重叠

来自分类Dev

第一次运行时从NSUserDefaults将图像作为NSData加载失败

来自分类Dev

React Native:第一次加载时未显示背景图像

来自分类Dev

检查地图是否第一次迭代的方法

来自分类Dev

Google Map Api:第一次加载时地图变灰,灰色区域无法加载

来自分类Dev

毕加索第一次运行时不调用onBitmapLoaded for循环

来自分类Dev

第一次错误使用Picasso加载图片

来自分类Dev

蚀第一次加载错误

来自分类Dev

serviceworker第一次不加载

来自分类Dev

网页未在第一次加载

来自分类Dev

UICollectionView第一次加载时明显滞后

来自分类Dev

UITableViewCell第一次未正确加载标签

来自分类Dev

仅在第一次或刷新时加载Javascript

来自分类Dev

第一次登录时加载 childViewControllers

来自分类Dev

在第一次加载时填充 selectizeInput

来自分类Dev

第一次加载时“$ 未定义”

Related 相关文章

热门标签

归档