透明なImageViewを追加しても、黒いマスクを完全に取り除くことはできませんでした。地図の上部と下部にはスクロール中に黒いマスクが表示されました。
そのため、私はthis answerに小さな変化を見出しました。 それは垂直scrollviewだったので、私は、私の地図の断片に
android:layout_marginTop="-100dp"
android:layout_marginBottom="-100dp"
を追加しました。私は私のメインScrollViewのためrequestDisallowInterceptTouchEvent(true)
を設定し、質問の後半部分を解決するために
<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>
:だから、私のレイアウトは今、このように見えました。ユーザーがトランスペアレントイメージにタッチして移動したときに、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;
}
}
});
これは私に役立ちました。それがあなたを助けることを願って..
"私はScrollViewに新しいMapFragmentsの1つを持っています" - これがうまくいくならば驚くでしょう。 「MapFragmentに、標準のMapViewを使用する代わりに、カスタマイズしたMapViewを使用するにはどうすればよいですか?」 - あなたはできません、AFAIK。 'MapView'をホストするための独自のフラグメントを作成する必要があります。 – CommonsWare
私も同じ問題に直面していますが、フラグメント内で生のMapViewを使用しています。 ScrollViewまたはViewPagerでスクロールするときに黒いマスクが残っているのと同じ問題です。 –
Nexus S(Android 4.1.2)では、この問題は発生していません。しかし、私がテストしたすべてのAndroid 2.2-2.3デバイスで、まったく同じ問題が発生しています。 – Ralf