Google地图上“自定义标记”中的TextView未在Android中显示

时间:2019-09-10 13:34:38

标签: android google-maps-markers layout-inflater

我创建了一个自定义标记,以在标记图像上显示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();
                                }
                            }

您能帮我解决这个问题吗?

谢谢。

0 个答案:

没有答案