Для проверки того, перекрывается ли 80% (или более) маркера вашим небольшим макетом, лучше использовать координаты экрана, а не LatLng
. Вы должны получить на экране y
координату маркера, маркер height
и height
"малого макета", после чего проверить, что y
координата терки маркера превышает y
координаты вершины малого макета на 80%.
Итак, что-то вроде этого:
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private static final String TAG = MainActivity.class.getSimpleName();
static final LatLng KYIV = new LatLng(50.450000, 30.523610);
private GoogleMap mGoogleMap;
private SupportMapFragment mMapSupportedFragment;
private LinearLayout mSmallLinearLayout;
private RelativeLayout mRootLayout;
private Marker mMarker;
private int mRootLayoutHeight;
private int mSmallLayoutHeight;
private int mMarkerWidth = 100;
private int mMarkerHeight = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRootLayout = (RelativeLayout) findViewById(R.id.root_layout);
mSmallLinearLayout = (LinearLayout) findViewById(R.id.small_bottom_layout);
mMapSupportedFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map_fragment);
mMapSupportedFragment.getMapAsync(MainActivity.this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
mRootLayout.post(new Runnable() {
@Override
public void run() {
mRootLayoutHeight = mRootLayout.getHeight();
}
});
mSmallLinearLayout.post(new Runnable() {
@Override
public void run() {
mSmallLayoutHeight = mSmallLinearLayout.getHeight();
}
});
mMarker = mGoogleMap.addMarker(new MarkerOptions()
.position(KYIV)
.icon(getMarkerIcon(mMarkerWidth, mMarkerHeight)));
mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
if (isMarkerOverlayed()) {
// do you magic here:
Toast.makeText(MainActivity.this, "Overlapped", Toast.LENGTH_SHORT).show();
};
}
});
}
private boolean isMarkerOverlayed() {
boolean overlayed = false;
LatLng markerLocation = mMarker.getPosition();
Projection projection = mGoogleMap.getProjection();
Point markerScreenPosition = projection.toScreenLocation(markerLocation);
int smallLayoutTopY = mRootLayoutHeight - mSmallLayoutHeight;
// 0.8 is 80% of marker height
if (markerScreenPosition.y >= smallLayoutTopY + 0.8 * mMarkerHeight &&
markerScreenPosition.y < mRootLayoutHeight) {
overlayed = true;
}
return overlayed;
}
private BitmapDescriptor getMarkerIcon(int width, int height) {
final Drawable iconDrawable = getResources().getDrawable(R.drawable.ic_marker);
final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
iconDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
iconDrawable.draw(canvas);
return BitmapDescriptorFactory.fromBitmap(bitmap);
}
}
у вас есть что-то вроде этого: