Зарегистрируйте событие клика по изображению, создающему экземпляр слоя на карте - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь настроить событие клика на изображении, используя Rect и getHitRect, как сообщается здесь , но я не могу получить согласованный результат.

Я создаюпростой activity layout:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/name_POI"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        tools:text="Name POI" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">

        <ImageView
            android:id="@+id/get_route"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:src="@drawable/ico_go" />

        <ImageView
            android:id="@+id/get_info_poi"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:src="@drawable/ico_info" />

    </LinearLayout>
</LinearLayout>

Затем я просто пытаюсь повторить пример mapbox,

private boolean handleClickCallout(PointF screenPoint)
{
    List<Feature> features = m_mapboxMap.queryRenderedFeatures(screenPoint, CALLOUT_LAYER_ID);
    if (!features.isEmpty())
    {
        if (features.size() == 1)
        {
            Feature feature = features.get(0);
            PointF symbolScreenPoint = m_mapboxMap.getProjection().toScreenLocation(convertToLatLng(feature));

            View view = m_hashViewMap.get(feature.getStringProperty(PROPERTY_NAME));

            TextView namePOIContainer = view.findViewById(R.id.name_POI);
            ImageView getRouteContainer = view.findViewById(R.id.get_route);
            ImageView getInfoPOIContainer = view.findViewById(R.id.get_info_poi);

            Rect hitRectNamePOI = new Rect();
            namePOIContainer.getHitRect(hitRectNamePOI);

            Rect hitRectGetRoute = new Rect();
            getRouteContainer.getHitRect(hitRectGetRoute);

            Rect hitRectGetInfoPOI = new Rect();
            getInfoPOIContainer.getHitRect(hitRectGetInfoPOI);

            hitRectNamePOI.offset((int) symbolScreenPoint.x, (int) symbolScreenPoint.y);
            hitRectGetRoute.offset((int) symbolScreenPoint.x, (int) symbolScreenPoint.y);
            hitRectGetInfoPOI.offset((int) symbolScreenPoint.x, (int) symbolScreenPoint.y);

            hitRectNamePOI.offset(0, -view.getMeasuredHeight());
            hitRectGetRoute.offset(0, -view.getMeasuredHeight());
            hitRectGetInfoPOI.offset(0, -view.getMeasuredHeight());

            if (hitRectNamePOI.contains((int) screenPoint.x, (int) screenPoint.y))
            {
                Toast.makeText(this, "Name", Toast.LENGTH_LONG).show();
            }

            if (hitRectGetRoute.contains((int) screenPoint.x, (int) screenPoint.y))
            {
                Toast.makeText(this, "Route", Toast.LENGTH_LONG).show();
            }

            if (hitRectGetInfoPOI.contains((int) screenPoint.x, (int) screenPoint.y))
            {
                Toast.makeText(this, "Info", Toast.LENGTH_LONG).show();
            }
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }

    return true;
}

Делая так, я не получаю согласованный результат с hitRectGetRoute и hitRectGetInfoPOIпотому что не все ImageView обрабатывают событие нажатия (область с размерами меньше, чем ImageView).hitRectNamePOI полностью пропущено, обрабатывая клики только в небольшой области справа @+id/get_info_poi.

Я не знаю, может ли это изображение прояснить все, area that fire event, more or less

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...