2017-04-04 7 views
2

Baidu Map을 사용하여 그림 URL이있는 서버에서 가져온 상점을 표시합니다. Glide를 사용하여지도 아이콘을 설정합니다.글라이드 콜백 방법에 매개 변수를 전달하는 방법은 무엇입니까?

다음은지도에 마커를 추가하는 방법입니다.


private void setMarks(List<ShopList> shops) { 

    for(ShopList shopItem : shops){ 
     double latitude = shopItem.getLat(); 
     double longitude = shopItem.getLng(); 
     LatLng latLng = new LatLng(latitude,longitude); 


     String shopName = shopItem.getName(); 
     OverlayOptions textOption = new TextOptions() 
       .text(shopName) 
       .fontSize(50) 
       .position(latLng); 
     mBaiduMap.addOverlay(textOption); 


     Glide.with(mContext.getApplicationContext()) 
       .load(shopItem.getCategory_image()) 
       .asBitmap() 
       .placeholder(R.drawable.ic_shop_image_loading) 
       .error(R.drawable.ic_shop_image_load_error)  
       .override(SizeUtils.dip2px(mContext,128),SizeUtils.dip2px(mContext,128)) 
       .centerCrop()                
       .into(target);           
    } 
} 
여기 글라이드 콜백 코드이다.

private SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>() { 
    @Override 
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
     BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(resource); 
     Marker marker = (Marker) mBaiduMap.addOverlay(new MarkerOptions().position(latLng).icon(descriptor)); 
     mMarkers.add(marker); 
    } 

}; 

내가 latLang의 매개 변수를 제공 할 수없는, 그래서 onResourceReady에 마커를 init을 할 수없는, 또한 mMarkers에 마커를 추가 할 수 없습니다. latLang을 특정 비트 맵과 연관 시키려면 어떻게해야합니까?

답변

1

사용자 지정 Target을 만들어야합니다.

public class MyTarget extends SimpleTarget<Bitmap> { 

    private final LatLng latLng; 

    public MyTarget(LatLng latLng) { 
     this.latLng = latLng; 
    } 

    @Override 
    public void onResourceReady(final Bitmap resource, final GlideAnimation<? super Bitmap> glideAnimation) { 
     // use your `latLng` 
    } 
} 

그리고이 방법으로 사용

Glide.with(...) 
    ...              
    .into(new MyTarget(latLng)); 
+0

덕분에 대답하기를. 나는 캡슐화에 대한 심층적 인 개념을 가지고있다. – sunpeijie