地图fragment:
package com.example.myapplication;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchResult;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import java.util.ArrayList;
import java.util.List;
public class MapFragment extends Fragment {
private MapView mMapView = null;
BaiduMap mBaiduMap = null;
LocationClient mLocationClient = null;
private boolean isFirstLocation = true;
private BitmapDescriptor bitmap;
private double mCurrentLat = 0.0;
private double mCurrentLon = 0.0;
private TextView markerText;
private TextView positionText;
private
Button normal;
Button Satellite;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_map, container, false);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//获取地图控件引用
positionText = getView().findViewById(R.id.mlocation);
markerText = getView().findViewById(R.id.markerloc);
mMapView = getView().findViewById(R.id.baiduMapView);
//获取到地图
mBaiduMap = mMapView.getMap();
mBaiduMap.setTrafficEnabled(true);
getPermissionMethod();
LatLng point1 = new LatLng(39.963175, 116.400244);
BitmapDescriptor wrj = BitmapDescriptorFactory.fromResource(R.drawable.marker);
OverlayOptions options = new MarkerOptions().position(point1).icon(wrj);
mBaiduMap.addOverlay(options);
PoiSearch mPoiSearch = PoiSearch.newInstance();
OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult poiResult) {
}
@Override
public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {
}
@Override
public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
}
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
}
};
normal = getView().findViewById(R.id.normal);
Satellite = getView().findViewById(R.id.satellite);
normal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mMapView = (MapView)getView(). findViewById(R.id.baiduMapView);
mBaiduMap = mMapView.getMap();
//普通地图 ,mBaiduMap是地图控制器对象
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
mBaiduMap.setTrafficEnabled(true);
}
});
Satellite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mMapView = (MapView)getView(). findViewById(R.id.baiduMapView);
mBaiduMap = mMapView.getMap();
//卫星地图
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
}
});
bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.marker);
mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
@Override
public void onMapPoiClick(MapPoi arg0) {
// TODO Auto-generated method stub
}
// 此方法就是点击地图监听
@Override
public void onMapClick(LatLng latLng) {
StringBuilder markerPosition = new StringBuilder();
// 获取经纬度
mCurrentLat = latLng.latitude;
mCurrentLon = latLng.longitude;
// 先清除图层
mBaiduMap.clear();
// 定义Maker坐标点
LatLng point1 = new LatLng(39.963175, 116.400244);
BitmapDescriptor wrj = BitmapDescriptorFactory.fromResource(R.drawable.marker);
OverlayOptions options1 = new MarkerOptions().position(point1).icon(wrj);
mBaiduMap.addOverlay(options1);
LatLng point = new LatLng(mCurrentLat, mCurrentLon);
// 构建MarkerOption,用于在地图上添加Marker
MarkerOptions options = new MarkerOptions().position(point)
.icon(bitmap);
// 在地图上添加Marker,并显示
mBaiduMap.addOverlay(options);
markerPosition.append(mCurrentLat).append("\n");
markerPosition.append(mCurrentLon).append("\n");
markerText.setText(markerPosition);
}
});
}
//设置地图放大的倍数
@Override
public void onResume() {
mMapView.onResume();
super.onResume();
}
@Override
public void onPause() {
mMapView.onPause();
super.onPause();
}
@Override
public void onDestroy() {
mLocationClient.stop();
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
public class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
StringBuilder Position = new StringBuilder();
Position.append(location.getLatitude()).append("\n");
Position.append(location.getLongitude()).append("\n");
Position.append(location.getAddress()).append("\n");
Position.append(location.getCity()).append("\n");
positionText.setText(Position);
if (location == null || mMapView == null) {
return;
}
LatLng mylocation = new LatLng(location.getLatitude(), location.getLongitude());
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(location.getDirection()).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLocation) {
isFirstLocation = false;
setPosition2Center(mBaiduMap, location, true);
}
Button button = (Button)getView(). findViewById(R.id.dw_bt);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mBaiduMap.setMyLocationEnabled(true);
setPosition2Center(mBaiduMap, location, true);
}
});
}
//回调方法,mLocationClient.start的 回调方法,
}
public void setPosition2Center(BaiduMap map, BDLocation bdLocation, Boolean isShowLoc) {
MyLocationData locData = new MyLocationData.Builder()
.accuracy(bdLocation.getRadius())
.direction(bdLocation.getRadius()).latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude()).build();
map.setMyLocationData(locData);
if (isShowLoc) {
LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
map.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}
public void init_location() {
mBaiduMap.setMyLocationEnabled(true);
mLocationClient = new LocationClient(MapFragment.this.getActivity());
//通过LocationClientOption设置LocationClient相关参数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
option.setIsNeedAddress(true);
//设置locationClientOption
mLocationClient.setLocOption(option);
//注册LocationListener监听器
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
//开启地图定位图层
mLocationClient.start();
}
private void getPermissionMethod() {
List<String> permissionList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(MapFragment.this.getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (!permissionList.isEmpty()) { //权限列表不是空
String[] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(MapFragment.this.getActivity(), permissions, 1);
} else {
requestLocation();
}
}
private void requestLocation() {
init_location();//其他请求设置
mLocationClient.start(); //定位请求开启
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MapFragment.this.getActivity(), "必须统一所有权限才能使用本程序", Toast.LENGTH_SHORT).show();
return;
}
}
requestLocation();
} else {
Toast.makeText(MapFragment.this.getActivity(), "发生未知错误", Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
}
mainactivity:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ViewPager viewpager;
private LinearLayout llmap;
private LinearLayout llfaction;
private LinearLayout lluser;
private LinearLayout llfind;
private ImageView ivmap;
private ImageView ivfaction;
private ImageView ivuser;
private ImageView ivfind;
private ImageView ivcurrent;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LayoutInflater Lf=getLayoutInflater().from(this);
View view1=Lf.inflate(R.layout.fragment_map,null);
View view2=Lf.inflate(R.layout.activity_function,null);
View view3=Lf.inflate(R.layout.activity_find,null);
View view4=Lf.inflate(R.layout.activity_user,null);
viewpager=findViewById(R.id.viewpage);
List<View> viewList=new ArrayList<>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
viewList.add(view4);
MyAdapter adapter=new MyAdapter(viewList);
viewpager.setAdapter(adapter);
initTableView();
}
private void initTableView() {
llmap=findViewById(R.id.tab_map);
llmap.setOnClickListener(this);
llfaction=findViewById(R.id.tab_faction);
llfaction.setOnClickListener(this);
llfind=findViewById(R.id.tab_find);
llfind.setOnClickListener(this);
lluser=findViewById(R.id.tab_user);
lluser.setOnClickListener(this);
ivmap=findViewById(R.id.tb_iv_map);
ivfaction=findViewById(R.id.tb_iv_faction);
ivfind=findViewById(R.id.tb_iv_find);
ivuser=findViewById(R.id.tb_iv_user);
ivmap.setSelected(true);
ivcurrent=ivmap;
}
private void changeTab(int position) {
ivcurrent.setSelected(false);
ViewPager viewpager=findViewById(R.id.viewpage);
switch (position)
{
case R.id.tab_map:viewpager.setCurrentItem(0);
case 0:ivmap.setSelected(true);ivcurrent=ivmap;break;
case R.id.tab_faction:viewpager.setCurrentItem(1);
case 1:ivfaction.setSelected(true);ivcurrent=ivfaction;break;
case R.id.tab_find:viewpager.setCurrentItem(2);
case 2:ivfind.setSelected(true);ivcurrent=ivfind;break;
case R.id.tab_user:viewpager.setCurrentItem(3);
case 3:ivuser.setSelected(true);ivcurrent=ivuser;break;
}
}
@Override
public void onClick(View view) {
changeTab(view.getId());
}
用viewpager加上4个fragment,这个方案可行,百度一下这个是怎么实现的吧