私にとって、透明なImageViewを追加しても、黒いマスクを完全に削除することはできませんでした。マップの上部と下部には、スクロール中に黒いマスクが表示されたままです。
それで、それに対する解決策は、私はこの答えに小さな変更を加えて見つけました。追加した、
android:layout_marginTop="-100dp"
android:layout_marginBottom="-100dp"
垂直スクロールビューだったので、私のマップフラグメントに。したがって、私のレイアウトは次のようになりました。
<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>
質問の2番目の部分を解決するためrequestDisallowInterceptTouchEvent(true)
に、メインのScrollViewに設定しました。ユーザーが透明な画像に触れて移動したときに、マップフラグメントがタッチイベントを取得できるようにMotionEvent.ACTION_DOWN
、の透明な画像のタッチを無効にしました。MotionEvent.ACTION_MOVE
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;
}
}
});
これは私のために働いた。それがあなたを助けることを願っています。