0
我正在開發一個android應用程序。 Google地圖和標記羣集在我的應用程序中被強制執行。應用程序在4.4和棒棒糖設備上運行良好。我使用以下代碼和recieving以下錯誤 java.lang.IllegalArgumentException異常創建自定義標記:寬度和高度必須> 0創建位圖時,寬度和高度必須大於0
我使用此代碼爲創建自定義位圖作爲標記
private Bitmap getMarkerBitmapFromView(@DrawableRes int resId,String typeProfile) {
View customMarkerView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_view, null);
RelativeLayout _markerType = (RelativeLayout) customMarkerView.findViewById(R.id.markertype);
ImageView markerImageView = (ImageView) customMarkerView.findViewById(R.id.image);
//ImageView markerStatus = (ImageView) customMarkerView.findViewById(R.id.onlieStatus);
if(typeProfile.equals("blue")) {
_markerType.setBackgroundResource(R.drawable.markr_general);
} else if(typeProfile.equals("green")){
_markerType.setBackgroundResource(R.drawable.markr_interest);
} else if(typeProfile.equals("red")) {
_markerType.setBackgroundResource(R.drawable.markr_profession);
}
markerImageView.setImageResource(resId);
customMarkerView.measure(View.MeasureSpec.EXACTLY, View.MeasureSpec.EXACTLY);
customMarkerView.layout(0, 0, customMarkerView.getMeasuredWidth(), customMarkerView.getMeasuredHeight());
customMarkerView.buildDrawingCache();
Bitmap returnedBitmap = Bitmap.createBitmap(customMarkerView.getMeasuredWidth(), customMarkerView.getMeasuredHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
canvas.drawColor(Color.WHITE, PorterDuff.Mode.SRC_IN);
Drawable drawable = customMarkerView.getBackground();
if (drawable != null)
drawable.draw(canvas);
customMarkerView.draw(canvas);
return returnedBitmap;
}
這裏是我的代碼標記rendring類
private class PersonRenderer extends DefaultClusterRenderer<Person> {
private final IconGenerator mIconGenerator = new IconGenerator(getApplicationContext());
private final IconGenerator mClusterIconGenerator = new IconGenerator(getApplicationContext());
private final CircleImageView mImageView;
private final CircleImageView mClusterImageView;
private final int mDimension;
public PersonRenderer() {
super(getApplicationContext(), mMap, mClusterManager);
View multiProfile = getLayoutInflater().inflate(R.layout.custom_marker_view, null);
mClusterIconGenerator.setContentView(multiProfile);
mClusterImageView = (CircleImageView) multiProfile.findViewById(R.id.image);
mImageView = new CircleImageView(getApplicationContext());
mDimension = (int) getResources().getDimension(R.dimen.custom_profile_image);
mImageView.setLayoutParams(new ViewGroup.LayoutParams(mDimension, mDimension));
int padding = (int) getResources().getDimension(R.dimen.custom_profile_padding);
mImageView.setPadding(padding, padding, padding, padding);
mIconGenerator.setContentView(mImageView);
}
@Override
protected void onBeforeClusterItemRendered(Person item, MarkerOptions markerOptions) {
mImageView.setImageResource(item.profilePhoto);
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getMarkerBitmapFromView(item.profilePhoto,item.profileType))).title("asfas");
//Bitmap icon = mIconGenerator.makeIcon();
// markerOptions.icon(getMarkerBitmapFromView(item.profilePhoto)).title(item.name);
}
@Override
protected void onBeforeClusterRendered(Cluster<Person> cluster, MarkerOptions markerOptions) {
/* List<Drawable> profilePhotos = new ArrayList<Drawable>(Math.min(4, cluster.getSize()));
int width = mDimension;
int height = mDimension;
MultiDrawable multiDrawable = new MultiDrawable(profilePhotos);
multiDrawable.setBounds(0, 0, width, height);
mClusterImageView.setImageDrawable(multiDrawable);
Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize()));*/
if(cluster.getSize() == 2) {
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.for_two,2,cluster)));
} else if(cluster.getSize() == 3) {
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.for_three,3,cluster)));
} else if(cluster.getSize() == 4) {
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.images_for,4,cluster)));
} else if(cluster.getSize() > 4) {
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(getClusteredMarkerBitmapFromView(R.drawable.images_for,cluster.getSize(),cluster)));
}
}
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
// Always render clusters.
return cluster.getSize() > 1;
}
}
我認爲如果你真的在控制檯上打印寬度和高度的值,那麼你會更好地理解你的程序是否真的能夠獲取一些實際值。當沒有值尚未分配給它們時,您可能會調用寬度和高度。檢查此[SO線程](http://stackoverflow.com/questions/17605662/illegalargumentexception-width-and-height-must-be-0-while-loading-bitmap-from)以獲取更多信息。 – noogui
謝謝,它有助於 –
這個問題解決了嗎? – noogui