我创建了一个自定义标记,以在标记图像上显示TextView。在我的xml中,我能够在ImageView上看到TextView,但是当我运行该应用程序时,仅显示ImageView,而不显示TextView。
以下是我的代码的一部分:
custommarker.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="80dp"
android:layout_marginLeft="5dp"
android:gravity="center_horizontal"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"
android:src="@mipmap/available" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/name"
android:textColor="@color/white"
android:textSize="14sp"
android:gravity="bottom"
android:layout_centerHorizontal="true"/>
</LinearLayout>
<TextView
android:id="@+id/available"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:text="244 Available"
android:textColor="@color/available_green"
android:textSize="10sp"
android:ellipsize="end"
android:layout_gravity="center_horizontal"
android:singleLine="true"
android:maxLines="1"
android:gravity="center_horizontal"/>
</FrameLayout>
Custom Marker.java
public class CustomMarker {
private View snapView;
private ImageView markerImage;
private TextView availableTxt;
private TextView nameTxt;
public View getSnapView() {
return snapView;
}
public ImageView getMarkerImage() {
return markerImage;
}
public TextView getAvailableTxt() {
return availableTxt;
}
public TextView getNameTxt() {
return nameTxt;
}
public CustomMarker invoke(Context mContext) {
snapView = LayoutInflater.from(mContext).inflate(R.layout.custommarker, null);
markerImage = (ImageView) snapView.findViewById(R.id.icon);
availableTxt = (TextView) snapView.findViewById(R.id.available);
nameTxt = (TextView) snapView.findViewById(R.id.name);
return this;
}
}
AvailableFragment.java中的部分代码
CustomMarker customMarker = new CustomMarker().invoke(getActivity());
ImageView markerImage = customMarker.getMarkerImage();
TextView availableTxt = customMarker.getAvailableTxt();
View snapView = customMarker.getSnapView();
availableTxt.setText(getResources().getString(R.string.available) + ": " + availability);
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) getActivity()).getWindowManager().getDefaultDisplay()
.getMetrics(displayMetrics);
snapView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT));
snapView.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
snapView.layout(0, 0, displayMetrics.widthPixels,
displayMetrics.heightPixels);
snapView.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(snapView.getMeasuredWidth(),
snapView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
snapView.draw(canvas);
if (bitmap != null) {
BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);
Marker marker = googleMap.addMarker(new MarkerOptions().position(latLng1).icon(icon));
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng1));
mapUtils.moveAndSetZoom(googleMap, latLng1, Numerics.EIGHTEEN);
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(latLng1);
marker.setTag("Availability");
try {
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng1));
} catch (Exception e) {
e.printStackTrace();
}
}
您能帮我解决这个问题吗?
谢谢。