Pour moi, l'ajout d'un transparent ImageView n'a pas aider à enlever le masque noir complètement. Les parties supérieure et inférieure de la carte encore montré le masque noir pendant le défilement.
Donc la solution pour elle, j'ai trouvé dans cette réponse avec un petit changement.
J'ai ajouté,
android:layout_marginTop="-100dp"
android:layout_marginBottom="-100dp"
à mon fragment de carte car il était vertical scrollview. Donc ma mise en page regardé de cette façon:
<RelativeLayout
android:id="@+id/map_layout"
android:layout_width="match_parent"
android:layout_height="300dp">
<fragment
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="-100dp"
android:layout_marginBottom="-100dp"
android:name="com.google.android.gms.maps.MapFragment"/>
<ImageView
android:id="@+id/transparent_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@color/transparent" />
</RelativeLayout>
Pour résoudre la deuxième partie de la question que je mis requestDisallowInterceptTouchEvent(true)
pour mon principal ScrollView. Lorsque l'utilisateur a touché le fond transparent de l'image et a déménagé j'ai désactivé la touche sur l'image transparente pour l' MotionEvent.ACTION_DOWN
et MotionEvent.ACTION_MOVE
, de sorte que le fragment de carte peuvent prendre les Événements Tactiles.
ScrollView mainScrollView = (ScrollView) findViewById(R.id.main_scrollview);
ImageView transparentImageView = (ImageView) findViewById(R.id.transparent_image);
transparentImageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
mainScrollView.requestDisallowInterceptTouchEvent(true);
// Disable touch on transparent view
return false;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
mainScrollView.requestDisallowInterceptTouchEvent(false);
return true;
case MotionEvent.ACTION_MOVE:
mainScrollView.requestDisallowInterceptTouchEvent(true);
return false;
default:
return true;
}
}
});
Cela a fonctionné pour moi. Espérons qu'il vous aide..