OsmdroidMapViewがあります。設定したのに
mapView.setClickable(false);
mapView.setFocusable(false);
マップは引き続き移動できます。マップビューとのすべての相互作用を無効にする簡単な方法はありますか?
OsmdroidMapViewがあります。設定したのに
mapView.setClickable(false);
mapView.setFocusable(false);
マップは引き続き移動できます。マップビューとのすべての相互作用を無効にする簡単な方法はありますか?
簡単な解決策は、@ Schrieveslaachと同じように、ただしmapViewを使用することです。
mapView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
私は解決策を見つけました。を設定して、タッチイベントを直接処理する必要がありますOnTouchListener
。例えば、
public class MapViewLayout extends RelativeLayout {
private MapView mapView;
/**
* @see #setDetachedMode(boolean)
*/
private boolean detachedMode;
// implement initialization of your layout...
private void setUpMapView() {
mapView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (detachedMode) {
if (event.getAction() == MotionEvent.ACTION_UP) {
// if you want to fire another event
}
// Is detached mode is active all other touch handler
// should not be invoked, so just return true
return true;
}
return false;
}
});
}
/**
* Sets the detached mode. In detached mode no interactions will be passed to the map, the map
* will be static (no movement, no zooming, etc).
*
* @param detachedMode
*/
public void setDetachedMode(boolean detachedMode) {
this.detachedMode = detachedMode;
}
}
あなたは試すことができます:
mapView.setEnabled(false);
マップビューとのすべての相互作用を無効にする必要があります
私のソリューションは@schrieveslaachと@sagixに似ていますが、基本MapView
クラスを拡張して新しい機能を追加するだけです。
class DisabledMapView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : MapView(context, attrs) {
private var isUserInteractionEnabled = true
override fun dispatchTouchEvent(event: MotionEvent?): Boolean {
if (isUserInteractionEnabled.not()) {
return false
}
return super.dispatchTouchEvent(event)
}
fun setUserInteractionEnabled(isUserInteractionEnabled: Boolean) {
this.isUserInteractionEnabled = isUserInteractionEnabled
}
}