注释问题代码

This commit is contained in:
ZhanGSKen 2025-02-24 04:30:26 +08:00
parent e06b642b70
commit 0c00ace869
64 changed files with 6902 additions and 6757 deletions

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sun Feb 23 19:49:38 GMT 2025
#Sun Feb 23 20:28:40 GMT 2025
stageCount=0
libraryProject=
baseVersion=1.0
publishVersion=1.0.0
buildCount=60
buildCount=61
baseBetaVersion=1.0.1

View File

@ -1,5 +1,6 @@
package cc.winboll.studio.positions.demo;
import cc.winboll.studio.positions.R;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

View File

@ -1,5 +1,6 @@
package cc.winboll.studio.positions.demo;
import cc.winboll.studio.positions.R;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
@ -11,43 +12,43 @@ import com.tencent.tencentmap.mapsdk.maps.TencentMap;
public abstract class AbsMapActivity extends AbsActivity {
private TencentMap mTencentMap;
protected int getLayoutId() {
return R.layout.activity_map_container;
}
@Override
protected final void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
FragmentManager manager = getSupportFragmentManager();
SupportMapFragment fragment = (SupportMapFragment) manager.findFragmentById(R.id.fragment_map);
if (fragment != null) {
mTencentMap = fragment.getMap();
}
onCreate(savedInstanceState, mTencentMap);
}
protected boolean checkMapInvalid() {
return mTencentMap == null || mTencentMap.isDestroyed();
}
protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap tencentMap) {
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
supportInvalidateOptionsMenu();
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
// private TencentMap mTencentMap;
//
// protected int getLayoutId() {
// return R.layout.activity_map_container;
// }
//
// @Override
// protected final void onCreate(@Nullable Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(getLayoutId());
//
// FragmentManager manager = getSupportFragmentManager();
// SupportMapFragment fragment = (SupportMapFragment) manager.findFragmentById(R.id.fragment_map);
// if (fragment != null) {
// mTencentMap = fragment.getMap();
// }
//
// onCreate(savedInstanceState, mTencentMap);
// }
//
// protected boolean checkMapInvalid() {
// return mTencentMap == null || mTencentMap.isDestroyed();
// }
//
// protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap tencentMap) {
//
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// supportInvalidateOptionsMenu();
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
}

View File

@ -31,168 +31,184 @@ import java.util.List;
public class IndoorMapActivity extends AppCompatActivity implements TencentMap.OnIndoorStateChangeListener {
private static final String TAG = "IndoorMapActivity";
private MapView mapView;
private TencentMap tencentMap;
private IndoorFloorView indoorFloorView;
private UiSettings uiSettings;
private Handler handler = new Handler();
private String floorName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_indoor);
mapView = findViewById(R.id.mapView);
indoorFloorView = findViewById(R.id.indoor_floor);
if (tencentMap == null) {
tencentMap = mapView.getMap();
}
//欧美汇室内地图需Key开通室内地图权限
CameraUpdate camera =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.979382, 116.314106),
18,
0f,
0f));
tencentMap.moveCamera(camera);
final ArrayList<MarkerCluster> markerClusters = new ArrayList<>();
uiSettings = tencentMap.getUiSettings();
tencentMap.setIndoorEnabled(true);
//设置室内蒙层颜色 sdk版本4.3.5新增接口
tencentMap.setIndoorMaskColor(R.color.color_C71585);
//设置室内图状态变化监听
tencentMap.setOnIndoorStateChangeListener(this);
tencentMap.setMapType(TencentMap.MAP_TYPE_DARK);
//设置是否隐藏楼层控件
uiSettings.setIndoorLevelPickerEnabled(false);
indoorFloorView.setOnIndoorFloorListener(new MyIndoorViewAdapter());
ClusterManager<MarkerCluster> markerClusterClusterManager = new ClusterManager<MarkerCluster>(this, tencentMap);
NonHierarchicalDistanceBasedAlgorithm<MarkerCluster> nba = new NonHierarchicalDistanceBasedAlgorithm<>(this);
nba.setMaxDistanceAtZoom(15);
markerClusterClusterManager.setAlgorithm(nba);
DefaultClusterRenderer<MarkerCluster> renderer = new DefaultClusterRenderer<>(this, tencentMap, markerClusterClusterManager);
renderer.setMinClusterSize(2);
renderer.setBuckets(new int[]{5, 10, 20});
markerClusterClusterManager.setRenderer(renderer);
//添加室内图marker
tencentMap.setOnMapPoiClickListener(new TencentMap.OnMapPoiClickListener() {
@Override
public void onClicked(MapPoi mapPoi) {
LatLng position = mapPoi.getPosition();
MarkerOptions markerOptions = new MarkerOptions().position(position).title(mapPoi.name).infoWindowEnable(true);
if (!TextUtils.isEmpty("F3")) {
markerOptions.indoorInfo(new IndoorInfo("11000023805", "F3"));
}
Marker marker = tencentMap.addMarker(markerOptions);
LatLng position1 = mapPoi.getPosition();
markerClusters.add(new MarkerCluster(position1.getLatitude(), position1.getLongitude()));
}
});
tencentMap.setOnCameraChangeListener(markerClusterClusterManager);
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public boolean onIndoorBuildingFocused() {
Log.d(TAG, "onIndoorBuildingFocused: 室内图场景激活回调");
return false;
}
@Override
public boolean onIndoorLevelActivated(final IndoorBuilding indoorBuilding) {
if (indoorBuilding != null) {
handler.post(new Runnable() {
@Override
public void run() {
indoorFloorView.setVisible(true);
if (mIndoorBuilding == null || !mIndoorBuilding.getBuidlingId().equals(indoorBuilding.getBuidlingId())) {
List<IndoorLevel> levels = indoorBuilding.getLevels();
String[] activedIndoorFloorNames1 = tencentMap.getActivedIndoorFloorNames();
indoorFloorView.setItems(activedIndoorFloorNames1);
for (int i = 0; i < levels.size(); i++) {
floorName = levels.get(i).getName();
indoorFloorView.setSeletion(floorName);
}
}
mIndoorBuilding = indoorBuilding;
}
});
} else {
indoorFloorView.setVisible(false);
}
public boolean onIndoorLevelActivated(IndoorBuilding p1) {
return false;
}
@Override
public boolean onIndoorBuildingDeactivated() {
Log.d(TAG, "onIndoorBuildingDeactivated: 当前室内图处于无效状态");
return false;
}
IndoorBuilding mIndoorBuilding = null;
private class MyIndoorViewAdapter implements IndoorFloorView.OnIndoorFloorListener {
@Override
public void onSelected(int selectedIndex) {
if (mIndoorBuilding != null) {
List<IndoorLevel> levels = mIndoorBuilding.getLevels();
String activedIndoorFloorName = tencentMap.getActivedIndoorFloorNames()[selectedIndex];
String name = levels.get(selectedIndex).getName();
name = activedIndoorFloorName;
String buidlingId = mIndoorBuilding.getBuidlingId();
tencentMap.setIndoorFloor(buidlingId, name);
}
}
}
// private static final String TAG = "IndoorMapActivity";
// private MapView mapView;
// private TencentMap tencentMap;
// private IndoorFloorView indoorFloorView;
// private UiSettings uiSettings;
// private Handler handler = new Handler();
// private String floorName;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_indoor);
// mapView = findViewById(R.id.mapView);
// indoorFloorView = findViewById(R.id.indoor_floor);
// if (tencentMap == null) {
// tencentMap = mapView.getMap();
// }
// //欧美汇室内地图需Key开通室内地图权限
// CameraUpdate camera =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.979382, 116.314106),
// 18,
// 0f,
// 0f));
// tencentMap.moveCamera(camera);
// final ArrayList<MarkerCluster> markerClusters = new ArrayList<>();
//
// uiSettings = tencentMap.getUiSettings();
// tencentMap.setIndoorEnabled(true);
// //设置室内蒙层颜色 sdk版本4.3.5新增接口
// tencentMap.setIndoorMaskColor(R.color.color_C71585);
// //设置室内图状态变化监听
// tencentMap.setOnIndoorStateChangeListener(this);
// tencentMap.setMapType(TencentMap.MAP_TYPE_DARK);
// //设置是否隐藏楼层控件
// uiSettings.setIndoorLevelPickerEnabled(false);
// indoorFloorView.setOnIndoorFloorListener(new MyIndoorViewAdapter());
// ClusterManager<MarkerCluster> markerClusterClusterManager = new ClusterManager<MarkerCluster>(this, tencentMap);
// NonHierarchicalDistanceBasedAlgorithm<MarkerCluster> nba = new NonHierarchicalDistanceBasedAlgorithm<>(this);
// nba.setMaxDistanceAtZoom(15);
// markerClusterClusterManager.setAlgorithm(nba);
// DefaultClusterRenderer<MarkerCluster> renderer = new DefaultClusterRenderer<>(this, tencentMap, markerClusterClusterManager);
// renderer.setMinClusterSize(2);
// renderer.setBuckets(new int[]{5, 10, 20});
// markerClusterClusterManager.setRenderer(renderer);
// //添加室内图marker
// tencentMap.setOnMapPoiClickListener(new TencentMap.OnMapPoiClickListener() {
// @Override
// public void onClicked(MapPoi mapPoi) {
// LatLng position = mapPoi.getPosition();
// MarkerOptions markerOptions = new MarkerOptions().position(position).title(mapPoi.name).infoWindowEnable(true);
// if (!TextUtils.isEmpty("F3")) {
// markerOptions.indoorInfo(new IndoorInfo("11000023805", "F3"));
//
// }
// Marker marker = tencentMap.addMarker(markerOptions);
// LatLng position1 = mapPoi.getPosition();
// markerClusters.add(new MarkerCluster(position1.getLatitude(), position1.getLongitude()));
//
// }
// });
// tencentMap.setOnCameraChangeListener(markerClusterClusterManager);
//
// }
//
// @Override
// protected void onStart() {
// super.onStart();
// mapView.onStart();
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mapView.onPause();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mapView.onStop();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mapView.onDestroy();
// }
//
// @Override
// public boolean onIndoorBuildingFocused() {
// Log.d(TAG, "onIndoorBuildingFocused: 室内图场景激活回调");
// return false;
// }
//
// @Override
// public boolean onIndoorLevelActivated(final IndoorBuilding indoorBuilding) {
// if (indoorBuilding != null) {
// handler.post(new Runnable() {
// @Override
// public void run() {
// indoorFloorView.setVisible(true);
// if (mIndoorBuilding == null || !mIndoorBuilding.getBuidlingId().equals(indoorBuilding.getBuidlingId())) {
// List<IndoorLevel> levels = indoorBuilding.getLevels();
// String[] activedIndoorFloorNames1 = tencentMap.getActivedIndoorFloorNames();
// indoorFloorView.setItems(activedIndoorFloorNames1);
// for (int i = 0; i < levels.size(); i++) {
// floorName = levels.get(i).getName();
// indoorFloorView.setSeletion(floorName);
// }
// }
// mIndoorBuilding = indoorBuilding;
// }
// });
// } else {
// indoorFloorView.setVisible(false);
// }
// return false;
// }
//
// @Override
// public boolean onIndoorBuildingDeactivated() {
// Log.d(TAG, "onIndoorBuildingDeactivated: 当前室内图处于无效状态");
// return false;
// }
//
// IndoorBuilding mIndoorBuilding = null;
//
// private class MyIndoorViewAdapter implements IndoorFloorView.OnIndoorFloorListener {
//
// @Override
// public void onSelected(int selectedIndex) {
// if (mIndoorBuilding != null) {
//
// List<IndoorLevel> levels = mIndoorBuilding.getLevels();
// String activedIndoorFloorName = tencentMap.getActivedIndoorFloorNames()[selectedIndex];
// String name = levels.get(selectedIndex).getName();
// name = activedIndoorFloorName;
// String buidlingId = mIndoorBuilding.getBuidlingId();
// tencentMap.setIndoorFloor(buidlingId, name);
// }
// }
// }
//}
//
//class MarkerCluster implements ClusterItem {
//
// private final LatLng latLng;
//
// public MarkerCluster(double lat, double longitude) {
// latLng = new LatLng(lat, longitude);
// }
//
// @Override
// public LatLng getPosition() {
//
// return latLng;
// }
}
class MarkerCluster implements ClusterItem {
private final LatLng latLng;
public MarkerCluster(double lat, double longitude) {
latLng = new LatLng(lat, longitude);
}
@Override
public LatLng getPosition() {
return latLng;
}
}

View File

@ -16,180 +16,180 @@
package cc.winboll.studio.positions.demo.basic;
import android.annotation.SuppressLint;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
import androidx.fragment.app.FragmentActivity;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
/**
* Demonstrates the different base layers of a map.
*/
@SuppressLint("NewApi")
public class MapStyleDemoActivity extends FragmentActivity implements TencentMap.OnCameraChangeListener {
private MapView mMapView;
private TextView mTextView;
private TencentMap mTencentMap;
private Switch mSwitch;
private Spinner mSpinner;
private String[] styles = new String[]{"style1", "style2", "style3", "style4", "style5",
"normal", "traffic_navi", "traffic_navi_night", "satellite", "night", "navi", "night", "eagle_day", "eagle_night"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_style);
mMapView = findViewById(R.id.map_view);
mTextView = findViewById(R.id.tv_level);
mSwitch=findViewById(R.id.switch_open);
mTencentMap = mMapView.getMap();
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.901268, 116.403854), 11f, 0f, 0f));
mTencentMap.moveCamera(cameraUpdate);
//mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(39.901268, 116.403854))); //移动地图
mTencentMap.setOnCameraChangeListener(this);
mSpinner = findViewById(R.id.sp_style);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, styles);
mSpinner.setAdapter(adapter);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (position < 5) {
mTencentMap.setMapStyle(position + 1);
}
switch (position) {
case 5:
mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NORMAL);
break;
case 6:
mTencentMap.setMapStyle(TencentMap.MAP_TYPE_TRAFFIC_NAVI);
break;
case 7:
mTencentMap.setMapStyle(TencentMap.MAP_TYPE_TRAFFIC_NIGHT);
break;
case 8:
mTencentMap.setMapStyle(TencentMap.MAP_TYPE_SATELLITE);
break;
case 9:
mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NIGHT);
break;
case 10:
mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NAVI);
break;
case 11:
mTencentMap.setMapStyle(13 + 1000);
break;
case 12:
mTencentMap.setMapStyle(14 + 1000);
break;
case 13:
mTencentMap.setMapStyle(15 + 1000);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
RadioGroup rg = findViewById(R.id.rg_map_type);
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb_normal_type:
if (mTencentMap != null) {
mTencentMap.setMapType(TencentMap.MAP_TYPE_NORMAL);
}
break;
case R.id.rb_dark_type:
if (mTencentMap != null) {
mTencentMap.setMapType(TencentMap.MAP_TYPE_DARK);
}
break;
case R.id.rb_sagellite_type:
if (mTencentMap != null) {
mTencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE);
}
break;
}
}
});
mTencentMap.getUiSettings().setCompassEnabled(true);
mTencentMap.getUiSettings().setMyLocationButtonEnabled(true);
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
PorterDuff.Mode buttonTintMode = compoundButton.getButtonTintMode();
if(b){
mTencentMap.setBuildingEnable(true);
}else{
mTencentMap.setBuildingEnable(false);
}
}
});
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mMapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mMapView.onStop();
}
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Log.i("TAG","地图滑动了");
mTextView.setText("当前缩放级别为:" + cameraPosition.zoom);
}
@Override
public void onCameraChangeFinished(CameraPosition cameraPosition) {
Log.i("TAG","地图滑动了");
mTextView.setText("当前缩放级别为:" + cameraPosition.zoom);
}
}
//import android.annotation.SuppressLint;
//import android.graphics.PorterDuff;
//import android.os.Bundle;
//import android.util.Log;
//import android.view.View;
//import android.widget.AdapterView;
//import android.widget.ArrayAdapter;
//import android.widget.CompoundButton;
//import android.widget.RadioGroup;
//import android.widget.Spinner;
//import android.widget.Switch;
//import android.widget.TextView;
//
//
//import androidx.fragment.app.FragmentActivity;
//
//import cc.winboll.studio.positions.R;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//
///**
// * Demonstrates the different base layers of a map.
// */
//@SuppressLint("NewApi")
//public class MapStyleDemoActivity extends FragmentActivity implements TencentMap.OnCameraChangeListener {
// private MapView mMapView;
// private TextView mTextView;
// private TencentMap mTencentMap;
// private Switch mSwitch;
// private Spinner mSpinner;
//
// private String[] styles = new String[]{"style1", "style2", "style3", "style4", "style5",
// "normal", "traffic_navi", "traffic_navi_night", "satellite", "night", "navi", "night", "eagle_day", "eagle_night"};
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_map_style);
// mMapView = findViewById(R.id.map_view);
// mTextView = findViewById(R.id.tv_level);
// mSwitch=findViewById(R.id.switch_open);
// mTencentMap = mMapView.getMap();
// CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.901268, 116.403854), 11f, 0f, 0f));
// mTencentMap.moveCamera(cameraUpdate);
// //mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(39.901268, 116.403854))); //移动地图
// mTencentMap.setOnCameraChangeListener(this);
// mSpinner = findViewById(R.id.sp_style);
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, styles);
// mSpinner.setAdapter(adapter);
// mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
// @Override
// public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// if (position < 5) {
// mTencentMap.setMapStyle(position + 1);
// }
// switch (position) {
// case 5:
// mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NORMAL);
// break;
// case 6:
// mTencentMap.setMapStyle(TencentMap.MAP_TYPE_TRAFFIC_NAVI);
// break;
// case 7:
// mTencentMap.setMapStyle(TencentMap.MAP_TYPE_TRAFFIC_NIGHT);
// break;
// case 8:
// mTencentMap.setMapStyle(TencentMap.MAP_TYPE_SATELLITE);
// break;
// case 9:
// mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NIGHT);
// break;
// case 10:
// mTencentMap.setMapStyle(TencentMap.MAP_TYPE_NAVI);
// break;
// case 11:
// mTencentMap.setMapStyle(13 + 1000);
// break;
// case 12:
// mTencentMap.setMapStyle(14 + 1000);
// break;
// case 13:
// mTencentMap.setMapStyle(15 + 1000);
// break;
// }
// }
//
// @Override
// public void onNothingSelected(AdapterView<?> parent) {
//
// }
// });
//
// RadioGroup rg = findViewById(R.id.rg_map_type);
// rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(RadioGroup group, int checkedId) {
// switch (checkedId) {
// case R.id.rb_normal_type:
// if (mTencentMap != null) {
// mTencentMap.setMapType(TencentMap.MAP_TYPE_NORMAL);
// }
// break;
// case R.id.rb_dark_type:
// if (mTencentMap != null) {
// mTencentMap.setMapType(TencentMap.MAP_TYPE_DARK);
// }
// break;
// case R.id.rb_sagellite_type:
// if (mTencentMap != null) {
// mTencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE);
// }
// break;
// }
// }
// });
// mTencentMap.getUiSettings().setCompassEnabled(true);
// mTencentMap.getUiSettings().setMyLocationButtonEnabled(true);
// mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// PorterDuff.Mode buttonTintMode = compoundButton.getButtonTintMode();
// if(b){
// mTencentMap.setBuildingEnable(true);
// }else{
// mTencentMap.setBuildingEnable(false);
// }
// }
// });
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mMapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mMapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mMapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mMapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mMapView.onStop();
// }
//
// @Override
// public void onCameraChange(CameraPosition cameraPosition) {
// Log.i("TAG","地图滑动了");
// mTextView.setText("当前缩放级别为:" + cameraPosition.zoom);
// }
//
// @Override
// public void onCameraChangeFinished(CameraPosition cameraPosition) {
// Log.i("TAG","地图滑动了");
// mTextView.setText("当前缩放级别为:" + cameraPosition.zoom);
// }
//}

View File

@ -1,91 +1,91 @@
package cc.winboll.studio.positions.demo.basic;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.TencentMapContext;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.Language;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.OverSeaTileProvider;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
public class OverseaMapActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//纽约时代广场海外地图需Key开通海外位置服务权限
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(40.75797, -73.985542),
11,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
//设置自定义海外图源
tencentMap.setOverSeaTileProvider(new CustomOverSeaTileProvider(tencentMap.getMapContext()));
}
class CustomOverSeaTileProvider extends OverSeaTileProvider {
boolean mIsZhLanguage;
boolean mIsNight;
/**
* 创建海外图源供应
*/
public CustomOverSeaTileProvider(TencentMapContext context){
//设置名称和版本号
super("custom", 1, context);
}
@Override
public URL getTileUrl(int x, int y, int zoom) {
String url = "https://xxxx.com/x=%d&y=%d&z=%d&s=%s&l=&s";
String formatUrl = String.format(Locale.ENGLISH, url, x, y, zoom, mIsNight ? "dark" : "day", mIsZhLanguage ? "zh" : "en");
try {
return new URL(formatUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
public boolean onDayNightChange(boolean dayNight) {
mIsNight = dayNight;
return true;
}
public boolean onLanguageChange(Language language) {
mIsZhLanguage = (language == Language.zh);
return true;
}
@Override
public Bitmap getLogo(boolean isNight) {
AssetManager assetManager = getAssets();
Bitmap iBitmap = null;
InputStream is = null;
try {
is = assetManager.open("logo.png");
iBitmap = BitmapFactory.decodeStream(is);
} catch (Exception e) {
return null;
} catch (OutOfMemoryError ignored) {
} finally {
// IO.safeClose(is);
}
return iBitmap;
}
}
}
//import android.content.res.AssetManager;
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.os.Bundle;
//
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.TencentMapContext;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.Language;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.OverSeaTileProvider;
//
//import java.io.InputStream;
//import java.net.MalformedURLException;
//import java.net.URL;
//import java.util.Locale;
//
//public class OverseaMapActivity extends SupportMapFragmentActivity {
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// //纽约时代广场海外地图需Key开通海外位置服务权限
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(40.75797, -73.985542),
// 11,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// //设置自定义海外图源
// tencentMap.setOverSeaTileProvider(new CustomOverSeaTileProvider(tencentMap.getMapContext()));
// }
//
// class CustomOverSeaTileProvider extends OverSeaTileProvider {
// boolean mIsZhLanguage;
// boolean mIsNight;
//
// /**
// * 创建海外图源供应
// */
// public CustomOverSeaTileProvider(TencentMapContext context){
// //设置名称和版本号
// super("custom", 1, context);
// }
//
// @Override
// public URL getTileUrl(int x, int y, int zoom) {
// String url = "https://xxxx.com/x=%d&y=%d&z=%d&s=%s&l=&s";
// String formatUrl = String.format(Locale.ENGLISH, url, x, y, zoom, mIsNight ? "dark" : "day", mIsZhLanguage ? "zh" : "en");
// try {
// return new URL(formatUrl);
// } catch (MalformedURLException e) {
// e.printStackTrace();
// }
// return null;
// }
//
// @Override
// public boolean onDayNightChange(boolean dayNight) {
// mIsNight = dayNight;
// return true;
// }
//
// public boolean onLanguageChange(Language language) {
// mIsZhLanguage = (language == Language.zh);
// return true;
// }
//
// @Override
// public Bitmap getLogo(boolean isNight) {
// AssetManager assetManager = getAssets();
// Bitmap iBitmap = null;
// InputStream is = null;
// try {
// is = assetManager.open("logo.png");
// iBitmap = BitmapFactory.decodeStream(is);
// } catch (Exception e) {
// return null;
// } catch (OutOfMemoryError ignored) {
// } finally {
// // IO.safeClose(is);
// }
// return iBitmap;
// }
// }
//}
//

View File

@ -9,43 +9,48 @@ import com.tencent.tencentmap.mapsdk.maps.TencentMap;
public class SetMapTypeActivity extends SupportMapFragmentActivity implements RadioGroup.OnCheckedChangeListener {
private RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
public void onCheckedChanged(RadioGroup p1, int p2) {
}
private void initView() {
radioGroup = findViewById(R.id.lay_map_type);
radioGroup.setVisibility(View.VISIBLE);
radioGroup.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i) {
case R.id.btn_normal: //普通地图-默认地图类型
tencentMap.setMapType(TencentMap.MAP_TYPE_NORMAL);
break;
case R.id.btn_satellite: //卫星地图
tencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE);
break;
case R.id.btn_dark: //暗色地图
tencentMap.setMapType(TencentMap.MAP_TYPE_DARK);
break;
case R.id.btn_traffic:
tencentMap.setTrafficEnabled(true);
break;
case R.id.style_map:
/*TencentMapOptions mapOptions = new TencentMapOptions();
//将本地资源打包到apk的asset目录中
mapOptions.setCustomAssetsPath("myMapStyle");
//参数1对应的是我的样式中的序号
tencentMap.setMapStyle(1);
MapView mMapView = new MapView(SetMapTypeActivity.this, mapOptions);*/
break;
}
}
// private RadioGroup radioGroup;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// initView();
// }
//
// private void initView() {
// radioGroup = findViewById(R.id.lay_map_type);
// radioGroup.setVisibility(View.VISIBLE);
// radioGroup.setOnCheckedChangeListener(this);
// }
//
// @Override
// public void onCheckedChanged(RadioGroup radioGroup, int i) {
// switch (i) {
// case R.id.btn_normal: //普通地图-默认地图类型
// tencentMap.setMapType(TencentMap.MAP_TYPE_NORMAL);
// break;
// case R.id.btn_satellite: //卫星地图
// tencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE);
// break;
// case R.id.btn_dark: //暗色地图
// tencentMap.setMapType(TencentMap.MAP_TYPE_DARK);
// break;
// case R.id.btn_traffic:
// tencentMap.setTrafficEnabled(true);
// break;
// case R.id.style_map:
// /*TencentMapOptions mapOptions = new TencentMapOptions();
// //将本地资源打包到apk的asset目录中
// mapOptions.setCustomAssetsPath("myMapStyle");
// //参数1对应的是我的样式中的序号
// tencentMap.setMapStyle(1);
// MapView mMapView = new MapView(SetMapTypeActivity.this, mapOptions);*/
// break;
// }
// }
}

View File

@ -16,35 +16,35 @@ import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class SupportMapFragmentActivity extends AppCompatActivity {
/**
* SDK提供了SupportMapFragment这个类来加载地图这个类的方便之处就在于不用手动管理内存
*/
private FragmentManager fm;
protected TencentMap tencentMap;
private SupportMapFragment supportMapFragment;
protected UiSettings mapUiSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_support_map_fragment);
//创建tencentMap地图对象可以完成对地图的几乎所有操作
fm = getSupportFragmentManager();
supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_frag);
tencentMap = supportMapFragment.getMap();
mapUiSettings = tencentMap.getUiSettings();
//对地图操作类进行操作
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.984066, 116.307548),
15,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
}
//
// /**
// * SDK提供了SupportMapFragment这个类来加载地图这个类的方便之处就在于不用手动管理内存
// */
//
// private FragmentManager fm;
// protected TencentMap tencentMap;
// private SupportMapFragment supportMapFragment;
// protected UiSettings mapUiSettings;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_support_map_fragment);
//
// //创建tencentMap地图对象可以完成对地图的几乎所有操作
// fm = getSupportFragmentManager();
// supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_frag);
// tencentMap = supportMapFragment.getMap();
// mapUiSettings = tencentMap.getUiSettings();
// //对地图操作类进行操作
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.984066, 116.307548),
// 15,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
//
// }
}

View File

@ -11,76 +11,76 @@ import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions;
public class UiSettingsActivity extends SupportMapFragmentActivity {
private Switch logoControl;
private Switch compassControl;
private Switch scaleViewControl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
}
private void initView(){
logoControl = findViewById(R.id.switch_logo);
compassControl = findViewById(R.id.switch_compass);
scaleViewControl = findViewById(R.id.switch_scale_view);
logoControl.setVisibility(View.VISIBLE);
logoControl.setText("logo位置");
compassControl.setVisibility(View.VISIBLE);
compassControl.setText("指南针");
scaleViewControl.setVisibility(View.VISIBLE);
scaleViewControl.setText("比例尺");
//打开缩放
mapUiSettings.setZoomControlsEnabled(true);
//打开位置标志
mapUiSettings.setMyLocationButtonEnabled(true);
logoControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
//logo左下角
mapUiSettings.setLogoPosition(TencentMapOptions.LOGO_POSITION_BOTTOM_LEFT);
}else{
//logo右上角
mapUiSettings.setLogoPosition(TencentMapOptions.LOGO_POSITION_TOP_RIGHT);
}
}
});
compassControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
//显示指南针
mapUiSettings.setCompassEnabled(true);
}else{
//隐藏指南针
mapUiSettings.setCompassEnabled(false);
}
}
});
scaleViewControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
//打开比例尺
mapUiSettings.setScaleViewEnabled(true);
}else{
//关闭比例尺
mapUiSettings.setScaleViewEnabled(false);
}
}
});
}
// private Switch logoControl;
// private Switch compassControl;
// private Switch scaleViewControl;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
//
// super.onCreate(savedInstanceState);
// initView();
// }
// private void initView(){
//
// logoControl = findViewById(R.id.switch_logo);
// compassControl = findViewById(R.id.switch_compass);
// scaleViewControl = findViewById(R.id.switch_scale_view);
// logoControl.setVisibility(View.VISIBLE);
// logoControl.setText("logo位置");
// compassControl.setVisibility(View.VISIBLE);
// compassControl.setText("指南针");
// scaleViewControl.setVisibility(View.VISIBLE);
// scaleViewControl.setText("比例尺");
//
// //打开缩放
// mapUiSettings.setZoomControlsEnabled(true);
// //打开位置标志
// mapUiSettings.setMyLocationButtonEnabled(true);
//
//
// logoControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// //logo左下角
// mapUiSettings.setLogoPosition(TencentMapOptions.LOGO_POSITION_BOTTOM_LEFT);
// }else{
// //logo右上角
// mapUiSettings.setLogoPosition(TencentMapOptions.LOGO_POSITION_TOP_RIGHT);
// }
//
// }
// });
//
// compassControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// //显示指南针
// mapUiSettings.setCompassEnabled(true);
// }else{
// //隐藏指南针
// mapUiSettings.setCompassEnabled(false);
// }
// }
// });
//
// scaleViewControl.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// //打开比例尺
// mapUiSettings.setScaleViewEnabled(true);
// }else{
// //关闭比例尺
// mapUiSettings.setScaleViewEnabled(false);
// }
// }
// });
//
//
//
//
// }
}

View File

@ -15,40 +15,40 @@ import com.tencent.tencentmap.mapsdk.maps.model.RestrictBoundsFitMode;
import com.tencent.tencentmap.mapsdk.maps.model.VisibleRegion;
public class MapAnchorZoomActivity extends SupportMapFragmentActivity {
private Marker marker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LatLng latLng = new LatLng(39.984108,116.307557);
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
latLng,
15,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
Projection projection = tencentMap.getProjection();
VisibleRegion region = projection.getVisibleRegion();
tencentMap.setRestrictBounds(new LatLngBounds(region.farRight, region.nearLeft), RestrictBoundsFitMode.FIT_HEIGHT);
tencentMap.setRestrictBounds(new LatLngBounds(region.farRight, region.nearLeft), RestrictBoundsFitMode.FIT_WIDTH);
setMarker(latLng);
}
/**
* 设置标注
*/
private void setMarker(LatLng latLng){
MarkerOptions options = new MarkerOptions().position(latLng);
//设置infowindow
options.title("锚点");
marker = tencentMap.addMarker(options);
marker.setInfoWindowEnable(true);
}
// private Marker marker;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
//
// LatLng latLng = new LatLng(39.984108,116.307557);
//
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// latLng,
// 15,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// Projection projection = tencentMap.getProjection();
//
// VisibleRegion region = projection.getVisibleRegion();
//
// tencentMap.setRestrictBounds(new LatLngBounds(region.farRight, region.nearLeft), RestrictBoundsFitMode.FIT_HEIGHT);
// tencentMap.setRestrictBounds(new LatLngBounds(region.farRight, region.nearLeft), RestrictBoundsFitMode.FIT_WIDTH);
// setMarker(latLng);
// }
// /**
// * 设置标注
// */
// private void setMarker(LatLng latLng){
//
// MarkerOptions options = new MarkerOptions().position(latLng);
//
// //设置infowindow
// options.title("锚点");
// marker = tencentMap.addMarker(options);
// marker.setInfoWindowEnable(true);
// }
}

View File

@ -1,54 +1,54 @@
package cc.winboll.studio.positions.demo.camera;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.RestrictBoundsFitMode;
public class MapBoundActivity extends SupportMapFragmentActivity {
private RadioGroup radioGroup;
private CheckBox fitHeight;
private CheckBox fitWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final LatLng northeastLatLng = new LatLng(39.984066, 116.307548);
final LatLng southwestLatLng = new LatLng(39.974066, 116.297548);
radioGroup = findViewById(R.id.lay_map_bound);
radioGroup.setVisibility(View.VISIBLE);
fitWidth = findViewById(R.id.btn_fit_width);
fitWidth.setText("适应宽度");
fitHeight = findViewById(R.id.btn_fit_height);
fitHeight.setText("适应高度");
fitHeight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
tencentMap.setRestrictBounds(new LatLngBounds(northeastLatLng, southwestLatLng), RestrictBoundsFitMode.FIT_HEIGHT);
}else{
}
}
});
fitWidth.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
tencentMap.setRestrictBounds(new LatLngBounds(northeastLatLng, southwestLatLng), RestrictBoundsFitMode.FIT_WIDTH);
}else{
}
}
});
}
}
//import android.os.Bundle;
//import android.view.View;
//import android.widget.CheckBox;
//import android.widget.CompoundButton;
//import android.widget.RadioGroup;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
//import com.tencent.tencentmap.mapsdk.maps.model.RestrictBoundsFitMode;
//
//public class MapBoundActivity extends SupportMapFragmentActivity {
// private RadioGroup radioGroup;
// private CheckBox fitHeight;
// private CheckBox fitWidth;
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// final LatLng northeastLatLng = new LatLng(39.984066, 116.307548);
// final LatLng southwestLatLng = new LatLng(39.974066, 116.297548);
// radioGroup = findViewById(R.id.lay_map_bound);
// radioGroup.setVisibility(View.VISIBLE);
// fitWidth = findViewById(R.id.btn_fit_width);
// fitWidth.setText("适应宽度");
// fitHeight = findViewById(R.id.btn_fit_height);
// fitHeight.setText("适应高度");
// fitHeight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// tencentMap.setRestrictBounds(new LatLngBounds(northeastLatLng, southwestLatLng), RestrictBoundsFitMode.FIT_HEIGHT);
// }else{
//
// }
// }
// });
//
// fitWidth.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// tencentMap.setRestrictBounds(new LatLngBounds(northeastLatLng, southwestLatLng), RestrictBoundsFitMode.FIT_WIDTH);
// }else{
//
// }
// }
// });
// }
//
//
//}

View File

@ -12,43 +12,43 @@ import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class MapCameraCenterActivity extends SupportMapFragmentActivity implements TencentMap.OnCameraChangeListener, TencentMap.OnMapClickListener {
private TextView textView;
private String info;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = findViewById(R.id.tv_info);
textView.setVisibility(View.VISIBLE);
tencentMap.setOnCameraChangeListener(this);
tencentMap.setOnMapClickListener(this);
}
/**
* 地图视图改变回调
* @param cameraPosition
*/
@Override
public void onCameraChange(CameraPosition cameraPosition) {
//获取当前地图视图信息
info = "经纬度:"+cameraPosition.target.latitude+","+cameraPosition.target.longitude+";zoom"+cameraPosition.zoom;
textView.setText(info);
}
@Override
public void onCameraChangeFinished(CameraPosition cameraPosition) {
//获取当前地图视图信息
info = "经纬度:"+cameraPosition.target.latitude+","+cameraPosition.target.longitude+";zoom"+cameraPosition.zoom;
Toast.makeText(MapCameraCenterActivity.this,info,Toast.LENGTH_SHORT).show();
textView.setText(info);
}
@Override
public void onMapClick(LatLng latLng) {
tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(latLng,15f, 0, 0)));
}
}
//public class MapCameraCenterActivity extends SupportMapFragmentActivity implements TencentMap.OnCameraChangeListener, TencentMap.OnMapClickListener {
// private TextView textView;
// private String info;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
//
// textView = findViewById(R.id.tv_info);
// textView.setVisibility(View.VISIBLE);
// tencentMap.setOnCameraChangeListener(this);
// tencentMap.setOnMapClickListener(this);
// }
//
//
// /**
// * 地图视图改变回调
// * @param cameraPosition
// */
// @Override
// public void onCameraChange(CameraPosition cameraPosition) {
// //获取当前地图视图信息
// info = "经纬度:"+cameraPosition.target.latitude+","+cameraPosition.target.longitude+";zoom"+cameraPosition.zoom;
// textView.setText(info);
// }
//
// @Override
// public void onCameraChangeFinished(CameraPosition cameraPosition) {
// //获取当前地图视图信息
// info = "经纬度:"+cameraPosition.target.latitude+","+cameraPosition.target.longitude+";zoom"+cameraPosition.zoom;
// Toast.makeText(MapCameraCenterActivity.this,info,Toast.LENGTH_SHORT).show();
// textView.setText(info);
//
// }
//
// @Override
// public void onMapClick(LatLng latLng) {
// tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(latLng,15f, 0, 0)));
// }
//}

View File

@ -1,126 +1,126 @@
package cc.winboll.studio.positions.demo.circle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.Arc;
import com.tencent.tencentmap.mapsdk.maps.model.ArcOptions;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.Marker;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class ArcActivity extends AppCompatActivity {
private MapView mapView;
private TencentMap tencentMap;
private boolean mMarkerAdded;
private Arc arc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_arc);
init();
}
private void init() {
mapView = findViewById(R.id.mapView);
tencentMap = mapView.getMap();
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(32.059352, 118.796623),
5,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.markercol, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded);
menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_collisionsmap:
mMarkerAdded = true;
LatLng startLat = new LatLng(39.89491, 116.322056);
LatLng endtLat = new LatLng(22.547, 114.085947);
LatLng passLat = new LatLng(32.059352, 118.796623);
ArcOptions arcOptions = new ArcOptions();
arcOptions.points(startLat, endtLat);
arcOptions.pass(passLat);
//设置起点到终点与起点外切线逆时针旋转的夹角角度
arcOptions.angle(30);
//设置线宽默认5
arcOptions.width(2);
//设置线颜色默认黑色
arcOptions.color(Color.BLUE);
arc = tencentMap.addArc(arcOptions);
break;
case R.id.menu_close_collisionsmap:
mMarkerAdded = false;
arc.remove();
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
}
package cc.winboll.studio.positions.demo.circle;
//import androidx.annotation.NonNull;
//import androidx.appcompat.app.AppCompatActivity;
//
//import android.graphics.Color;
//import android.os.Bundle;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.view.View;
//
//import cc.winboll.studio.positions.R;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.Arc;
//import com.tencent.tencentmap.mapsdk.maps.model.ArcOptions;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.Marker;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
//
//public class ArcActivity extends AppCompatActivity {
//
// private MapView mapView;
// private TencentMap tencentMap;
// private boolean mMarkerAdded;
// private Arc arc;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_arc);
// init();
// }
//
// private void init() {
// mapView = findViewById(R.id.mapView);
// tencentMap = mapView.getMap();
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(32.059352, 118.796623),
// 5,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.markercol, menu);
// return super.onCreateOptionsMenu(menu);
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded);
// menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_collisionsmap:
// mMarkerAdded = true;
// LatLng startLat = new LatLng(39.89491, 116.322056);
// LatLng endtLat = new LatLng(22.547, 114.085947);
// LatLng passLat = new LatLng(32.059352, 118.796623);
// ArcOptions arcOptions = new ArcOptions();
// arcOptions.points(startLat, endtLat);
// arcOptions.pass(passLat);
// //设置起点到终点与起点外切线逆时针旋转的夹角角度
// arcOptions.angle(30);
// //设置线宽默认5
// arcOptions.width(2);
// //设置线颜色默认黑色
// arcOptions.color(Color.BLUE);
// arc = tencentMap.addArc(arcOptions);
// break;
// case R.id.menu_close_collisionsmap:
// mMarkerAdded = false;
// arc.remove();
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mapView.onStop();
// }
//}

View File

@ -8,28 +8,28 @@ import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class CircleOptionsActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Circle circle = tencentMap.addCircle(circleOptions);
Circle newCircle = tencentMap.addCircle(newCircleOptions);
newCircle.setCenter(new LatLng(39.98408, 116.30701)); //重新设置圆心
newCircle.setOptions(newCircleOptions); //重新设置圆形属性
}
/**
* 圆形选项
*/
private CircleOptions circleOptions = new CircleOptions() //圆形选项
.center(new LatLng(39.9849, 116.3977)) //圆心位置
.clickable(true) //支持点击
.fillColor((128 << 24) + (100 << 16) + (50 << 8) + 120) //设置填充颜色RGBA
.radius(110d) //设置半径
.visible(true) //设置是否可见
.zIndex(1) //设置堆叠顺序越大优先级越高
.strokeWidth(1) //描边宽度
.strokeColor((128 << 24) + (128 << 16) + (128 << 8) + 128); //描边颜色
private CircleOptions newCircleOptions = new CircleOptions().center(new LatLng(39.121, 116.454)).radius(90d).fillColor(0xff00ff00);
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// Circle circle = tencentMap.addCircle(circleOptions);
// Circle newCircle = tencentMap.addCircle(newCircleOptions);
// newCircle.setCenter(new LatLng(39.98408, 116.30701)); //重新设置圆心
// newCircle.setOptions(newCircleOptions); //重新设置圆形属性
// }
//
// /**
// * 圆形选项
// */
// private CircleOptions circleOptions = new CircleOptions() //圆形选项
// .center(new LatLng(39.9849, 116.3977)) //圆心位置
// .clickable(true) //支持点击
// .fillColor((128 << 24) + (100 << 16) + (50 << 8) + 120) //设置填充颜色RGBA
// .radius(110d) //设置半径
// .visible(true) //设置是否可见
// .zIndex(1) //设置堆叠顺序越大优先级越高
// .strokeWidth(1) //描边宽度
// .strokeColor((128 << 24) + (128 << 16) + (128 << 8) + 128); //描边颜色
//
//
// private CircleOptions newCircleOptions = new CircleOptions().center(new LatLng(39.121, 116.454)).radius(90d).fillColor(0xff00ff00);
}

View File

@ -9,16 +9,16 @@ import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class DrawCircleActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LatLng latLng = new LatLng(39.984059,116.307771);
Circle circle = tencentMap.addCircle(new CircleOptions().
center(latLng).
radius(100d).
fillColor(getResources().getColor(R.color.style)).
strokeColor(getResources().getColor(R.color.colorPrimary)).
strokeWidth(1));
}
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// LatLng latLng = new LatLng(39.984059,116.307771);
// Circle circle = tencentMap.addCircle(new CircleOptions().
// center(latLng).
// radius(100d).
// fillColor(getResources().getColor(R.color.style)).
// strokeColor(getResources().getColor(R.color.colorPrimary)).
// strokeWidth(1));
// }
}

View File

@ -1,80 +1,80 @@
package cc.winboll.studio.positions.demo.gesture;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
public class GestureSettingsActivity extends SupportMapFragmentActivity {
private CheckBox scrollBox;
private CheckBox zoomBox;
private CheckBox rotateBox;
private CheckBox tiltBox;
private RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
radioGroup = findViewById(R.id.lay_checkbox);
radioGroup.setVisibility(View.VISIBLE);
initView();
}
private void initView(){
scrollBox = findViewById(R.id.btn_scroll);
zoomBox = findViewById(R.id.btn_zoom);
rotateBox = findViewById(R.id.btn_rotate);
tiltBox = findViewById(R.id.btn_slope);
scrollBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
mapUiSettings.setScrollGesturesEnabled(true);
}else{
mapUiSettings.setScrollGesturesEnabled(false);
}
}
});
zoomBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
mapUiSettings.setZoomGesturesEnabled(true);
}else{
mapUiSettings.setZoomGesturesEnabled(false);
}
}
});
rotateBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
mapUiSettings.setRotateGesturesEnabled(true);
}else{
mapUiSettings.setRotateGesturesEnabled(false);
}
}
});
tiltBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
mapUiSettings.setTiltGesturesEnabled(true);
}else{
mapUiSettings.setTiltGesturesEnabled(false);
}
}
});
}
}
//import android.os.Bundle;
//import android.view.View;
//import android.widget.CheckBox;
//import android.widget.CompoundButton;
//import android.widget.RadioGroup;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//
//public class GestureSettingsActivity extends SupportMapFragmentActivity {
//
// private CheckBox scrollBox;
// private CheckBox zoomBox;
// private CheckBox rotateBox;
// private CheckBox tiltBox;
// private RadioGroup radioGroup;
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// radioGroup = findViewById(R.id.lay_checkbox);
// radioGroup.setVisibility(View.VISIBLE);
// initView();
// }
//
// private void initView(){
// scrollBox = findViewById(R.id.btn_scroll);
// zoomBox = findViewById(R.id.btn_zoom);
// rotateBox = findViewById(R.id.btn_rotate);
// tiltBox = findViewById(R.id.btn_slope);
//
//
// scrollBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// mapUiSettings.setScrollGesturesEnabled(true);
// }else{
// mapUiSettings.setScrollGesturesEnabled(false);
// }
// }
// });
//
//
// zoomBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// mapUiSettings.setZoomGesturesEnabled(true);
// }else{
// mapUiSettings.setZoomGesturesEnabled(false);
// }
// }
// });
//
// rotateBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// mapUiSettings.setRotateGesturesEnabled(true);
// }else{
// mapUiSettings.setRotateGesturesEnabled(false);
// }
// }
// });
//
// tiltBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// mapUiSettings.setTiltGesturesEnabled(true);
// }else{
// mapUiSettings.setTiltGesturesEnabled(false);
// }
// }
// });
// }
//
//}

View File

@ -8,75 +8,126 @@ import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.TencentMapGestureListener;
import com.tencent.tencentmap.mapsdk.maps.model.TencentMapGestureListener.TwoFingerMoveAgainstStatus;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition.Trigger;
public class MapGestureListenActivity extends SupportMapFragmentActivity implements TencentMapGestureListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = findViewById(R.id.tv_info);
textView.setVisibility(View.VISIBLE);
tencentMap.setTencentMapGestureListener(this);
public boolean onDoubleTap(float p1, float p2) {
return false;
}
@Override
public boolean onDoubleTap(float v, float v1) {
textView.setText("单指双击");
return true;
public boolean onSingleTap(float p1, float p2) {
return false;
}
@Override
public boolean onSingleTap(float v, float v1) {
textView.setText("单指单击");
return true;
public boolean onFling(float p1, float p2) {
return false;
}
@Override
public boolean onFling(float v, float v1) {
textView.setText("单指惯性滑动");
return true;
public boolean onScroll(float p1, float p2) {
return false;
}
@Override
public boolean onScroll(float v, float v1) {
textView.setText("单指滑动");
return true;
public boolean onLongPress(float p1, float p2) {
return false;
}
@Override
public boolean onLongPress(float v, float v1) {
textView.setText("长按");
return true;
public boolean onDown(float p1, float p2) {
return false;
}
@Override
public boolean onDown(float v, float v1) {
textView.setText("单指按下");
return true;
public boolean onUp(float p1, float p2) {
return false;
}
@Override
public boolean onUp(float v, float v1) {
textView.setText("单指抬起");
return true;
}
@Override
public boolean onTwoFingerMoveAgainst(TwoFingerMoveAgainstStatus twoFingerMoveAgainstStatus, CameraPosition cameraPosition) {
textView.setText("双指捏合");
public boolean onTwoFingerMoveAgainst(TencentMapGestureListener.TwoFingerMoveAgainstStatus p1, CameraPosition p2) {
return false;
}
@Override
public void onMapStable() {
textView.setText("地图稳定");
return;
}
@Override
public void onMapStableBy(CameraPosition.Trigger trigger) {
textView.setText("地图稳定 by " + trigger.name());
return;
public void onMapStableBy(CameraPosition.Trigger p1) {
}
// private TextView textView;
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// textView = findViewById(R.id.tv_info);
// textView.setVisibility(View.VISIBLE);
// tencentMap.setTencentMapGestureListener(this);
// }
//
// @Override
// public boolean onDoubleTap(float v, float v1) {
// textView.setText("单指双击");
// return true;
// }
//
// @Override
// public boolean onSingleTap(float v, float v1) {
// textView.setText("单指单击");
// return true;
// }
//
// @Override
// public boolean onFling(float v, float v1) {
// textView.setText("单指惯性滑动");
// return true;
// }
//
// @Override
// public boolean onScroll(float v, float v1) {
// textView.setText("单指滑动");
// return true;
// }
//
// @Override
// public boolean onLongPress(float v, float v1) {
// textView.setText("长按");
// return true;
// }
//
// @Override
// public boolean onDown(float v, float v1) {
// textView.setText("单指按下");
// return true;
// }
//
// @Override
// public boolean onUp(float v, float v1) {
// textView.setText("单指抬起");
// return true;
// }
//
// @Override
// public boolean onTwoFingerMoveAgainst(TwoFingerMoveAgainstStatus twoFingerMoveAgainstStatus, CameraPosition cameraPosition) {
// textView.setText("双指捏合");
// return false;
// }
//
// @Override
// public void onMapStable() {
// textView.setText("地图稳定");
// return;
// }
//
// @Override
// public void onMapStableBy(CameraPosition.Trigger trigger) {
// textView.setText("地图稳定 by " + trigger.name());
// return;
// }
}

View File

@ -10,21 +10,21 @@ import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class MapListenActivity extends SupportMapFragmentActivity implements TencentMap.OnMapClickListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = findViewById(R.id.tv_info);
textView.setVisibility(View.VISIBLE);
tencentMap.setOnMapClickListener(this);
}
@Override
public void onMapClick(LatLng latLng) {
String info = "经纬度:" + latLng.latitude + "," + latLng.longitude;
Toast.makeText(MapListenActivity.this, info, Toast.LENGTH_SHORT).show();
textView.setText(info);
}
}
//public class MapListenActivity extends SupportMapFragmentActivity implements TencentMap.OnMapClickListener {
// private TextView textView;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// textView = findViewById(R.id.tv_info);
// textView.setVisibility(View.VISIBLE);
// tencentMap.setOnMapClickListener(this);
// }
//
// @Override
// public void onMapClick(LatLng latLng) {
// String info = "经纬度:" + latLng.latitude + "," + latLng.longitude;
// Toast.makeText(MapListenActivity.this, info, Toast.LENGTH_SHORT).show();
// textView.setText(info);
// }
//}

View File

@ -1,63 +1,63 @@
package cc.winboll.studio.positions.demo.gesture;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class MapLongClickActivity extends SupportMapFragmentActivity implements TencentMap.OnMapLongClickListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = findViewById(R.id.tv_info);
textView.setVisibility(View.VISIBLE);
tencentMap.setOnMapLongClickListener(this);
}
@Override
public void onMapLongClick(LatLng latLng) {
String info = "经纬度:"+latLng.latitude+","+latLng.longitude;
textView.setText(info);
setMarker(latLng);
}
/**
* 长按添加标注
*/
private void setMarker(LatLng latLng){
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
MarkerOptions options = new MarkerOptions().position(latLng).icon(bitmapDescriptor);
tencentMap.clear();
tencentMap.addMarker(options);
}
private Bitmap getBitMap(int resourceId){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 100;
int newHeight = 100;
float widthScale = ((float)newWidth)/width;
float heightScale = ((float)newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
return bitmap;
}
}
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.graphics.Matrix;
//import android.os.Bundle;
//import android.view.View;
//import android.widget.TextView;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
//
//public class MapLongClickActivity extends SupportMapFragmentActivity implements TencentMap.OnMapLongClickListener {
// private TextView textView;
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// textView = findViewById(R.id.tv_info);
// textView.setVisibility(View.VISIBLE);
// tencentMap.setOnMapLongClickListener(this);
// }
//
// @Override
// public void onMapLongClick(LatLng latLng) {
// String info = "经纬度:"+latLng.latitude+","+latLng.longitude;
// textView.setText(info);
// setMarker(latLng);
// }
//
// /**
// * 长按添加标注
// */
// private void setMarker(LatLng latLng){
//
// BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
// MarkerOptions options = new MarkerOptions().position(latLng).icon(bitmapDescriptor);
// tencentMap.clear();
// tencentMap.addMarker(options);
//
// }
//
//
// private Bitmap getBitMap(int resourceId){
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 100;
// int newHeight = 100;
// float widthScale = ((float)newWidth)/width;
// float heightScale = ((float)newHeight)/height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
// return bitmap;
// }
//
//
//}

View File

@ -1,197 +1,197 @@
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.Switch;
import com.tencent.map.sdk.utilities.visualization.aggregation.AggregationOverlay;
import com.tencent.map.sdk.utilities.visualization.aggregation.AggregationOverlayProvider;
import com.tencent.map.sdk.utilities.visualization.aggregation.HoneyCombVectorOverlayProvider;
import com.tencent.map.sdk.utilities.visualization.datamodels.WeightedLatLng;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class AggregationOverlayActivity extends AppCompatActivity {
private MapView mMapView;
private TencentMap mTencentMap;
private AggregationOverlay aggregationOverlay;
private AggregationOverlayProvider aggregationOverlayProvider;
private Switch btnSwitch3D;
boolean mIsSelected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aggregation_overlay_design);
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.vectorheatmap, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_vectorheatmap:
addAggregation();
break;
case R.id.menu_close_vectorheatmap:
mIsSelected = false;
if (aggregationOverlay != null) {
aggregationOverlay.remove();
aggregationOverlay = null;
}
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mMapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mMapView.onStop();
}
private void init() {
mMapView = findViewById(R.id.mapView);
mTencentMap = mMapView.getMap();
mTencentMap.setMapStyle(3);
mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(10f));
btnSwitch3D = (Switch) findViewById(R.id.btn_switch_3D);
bindListener();
}
private void bindListener() {
CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
switch (compoundButton.getId()) {
case R.id.btn_switch_3D:
if (aggregationOverlay != null) {
if (compoundButton.isChecked()) {
aggregationOverlayProvider.enable3D(true);
aggregationOverlayProvider.enable3D(true).setAnimateDuration(3000);
} else {
aggregationOverlayProvider.enable3D(false);
}
mTencentMap.updateVectorOverlay(aggregationOverlay, aggregationOverlayProvider);
}
break;
default:
break;
}
}
};
btnSwitch3D.setOnCheckedChangeListener(onCheckedChangeListener);
}
protected void addAggregation() {
mIsSelected = true;
if (aggregationOverlay != null) {
return;
}
// mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.961629, 116.355343), 12, 0, 0)));
mTencentMap.setBuildingEnable(false);
mTencentMap.setPoisEnabled(false);
BufferedReader br = null;
try {
ArrayList<WeightedLatLng> nodes = new ArrayList<WeightedLatLng>();
br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("data2k")));
String line = null;
while ((line = br.readLine()) != null) {
String[] lines = line.split("\t");
if (lines.length == 3) {
double value = Double.parseDouble(lines[2]);
LatLng latLng = new LatLng((Double.parseDouble(lines[1])), (Double.parseDouble(lines[0])));
nodes.add(new WeightedLatLng(latLng, value));
}
}
int[] colors = {
Color.argb(255, 0x01, 0x2C, 0x4B),
Color.argb(255, 0x17, 0x3E, 0x59),
Color.argb(255, 0x3A, 0x73, 0x78),
Color.argb(255, 0x98, 0xCD, 0x9A),
Color.argb(255, 0xF6, 0xFB, 0xB6)
};
double[] startPoints = {0.f, 0.1f, 0.15f, 0.3f, 0.5f};
aggregationOverlayProvider = new HoneyCombVectorOverlayProvider()
.nodes(nodes.toArray(new WeightedLatLng[0]))
.setHeightRange(0, 4000);
aggregationOverlayProvider.colors(colors, startPoints);
aggregationOverlay = mTencentMap.addVectorOverlay(aggregationOverlayProvider);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.Switch;
import com.tencent.map.sdk.utilities.visualization.aggregation.AggregationOverlay;
import com.tencent.map.sdk.utilities.visualization.aggregation.AggregationOverlayProvider;
import com.tencent.map.sdk.utilities.visualization.aggregation.HoneyCombVectorOverlayProvider;
import com.tencent.map.sdk.utilities.visualization.datamodels.WeightedLatLng;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class AggregationOverlayActivity extends AppCompatActivity {
// private MapView mMapView;
// private TencentMap mTencentMap;
// private AggregationOverlay aggregationOverlay;
// private AggregationOverlayProvider aggregationOverlayProvider;
// private Switch btnSwitch3D;
//
// boolean mIsSelected;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_aggregation_overlay_design);
// init();
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.vectorheatmap, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
// menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_vectorheatmap:
// addAggregation();
// break;
// case R.id.menu_close_vectorheatmap:
// mIsSelected = false;
// if (aggregationOverlay != null) {
// aggregationOverlay.remove();
// aggregationOverlay = null;
// }
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mMapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mMapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mMapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mMapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mMapView.onStop();
// }
//
// private void init() {
// mMapView = findViewById(R.id.mapView);
// mTencentMap = mMapView.getMap();
// mTencentMap.setMapStyle(3);
// mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(10f));
// btnSwitch3D = (Switch) findViewById(R.id.btn_switch_3D);
// bindListener();
// }
//
//
// private void bindListener() {
//
// CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
//
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// switch (compoundButton.getId()) {
// case R.id.btn_switch_3D:
// if (aggregationOverlay != null) {
// if (compoundButton.isChecked()) {
// aggregationOverlayProvider.enable3D(true);
// aggregationOverlayProvider.enable3D(true).setAnimateDuration(3000);
// } else {
// aggregationOverlayProvider.enable3D(false);
// }
// mTencentMap.updateVectorOverlay(aggregationOverlay, aggregationOverlayProvider);
// }
// break;
// default:
// break;
// }
// }
// };
//
//
// btnSwitch3D.setOnCheckedChangeListener(onCheckedChangeListener);
//
// }
//
// protected void addAggregation() {
// mIsSelected = true;
// if (aggregationOverlay != null) {
// return;
// }
// // mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.961629, 116.355343), 12, 0, 0)));
// mTencentMap.setBuildingEnable(false);
// mTencentMap.setPoisEnabled(false);
// BufferedReader br = null;
// try {
// ArrayList<WeightedLatLng> nodes = new ArrayList<WeightedLatLng>();
// br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("data2k")));
// String line = null;
// while ((line = br.readLine()) != null) {
// String[] lines = line.split("\t");
// if (lines.length == 3) {
// double value = Double.parseDouble(lines[2]);
// LatLng latLng = new LatLng((Double.parseDouble(lines[1])), (Double.parseDouble(lines[0])));
// nodes.add(new WeightedLatLng(latLng, value));
// }
// }
//
// int[] colors = {
// Color.argb(255, 0x01, 0x2C, 0x4B),
// Color.argb(255, 0x17, 0x3E, 0x59),
// Color.argb(255, 0x3A, 0x73, 0x78),
// Color.argb(255, 0x98, 0xCD, 0x9A),
// Color.argb(255, 0xF6, 0xFB, 0xB6)
// };
// double[] startPoints = {0.f, 0.1f, 0.15f, 0.3f, 0.5f};
//
//
// aggregationOverlayProvider = new HoneyCombVectorOverlayProvider()
// .nodes(nodes.toArray(new WeightedLatLng[0]))
// .setHeightRange(0, 4000);
// aggregationOverlayProvider.colors(colors, startPoints);
// aggregationOverlay = mTencentMap.addVectorOverlay(aggregationOverlayProvider);
//
//
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// if (br != null) {
// try {
// br.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// }
}

View File

@ -1,182 +1,182 @@
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
import com.tencent.map.sdk.utilities.visualization.datamodels.FromToLatLng;
import com.tencent.map.sdk.utilities.visualization.od.ArcLineOverlay;
import com.tencent.map.sdk.utilities.visualization.od.ArcLineOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class ArcLineLayerActivity extends AppCompatActivity {
private MapView mMapView;
private TencentMap mTencentMap;
private VectorOverlay vectorOverlay;
private ArcLineOverlayProvider options;
private Switch btnSwitch3D;
boolean mIsSelected;
private Switch btnani3D;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_arc_line_layer_design);
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.vectorheatmap, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_vectorheatmap:
btnSwitch3D.setVisibility(View.VISIBLE);
addArcLineLayer();
break;
case R.id.menu_close_vectorheatmap:
mIsSelected = false;
if (vectorOverlay != null) {
vectorOverlay.remove();
vectorOverlay = null;
}
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mMapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mMapView.onStop();
}
private void init() {
mMapView = findViewById(R.id.mapView);
mTencentMap = mMapView.getMap();
mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(5f));
btnSwitch3D = (Switch) findViewById(R.id.btn_switch_3D);
bindListener();
}
private void bindListener() {
CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
switch (compoundButton.getId()) {
case R.id.btn_switch_3D:
if (vectorOverlay != null) {
if (compoundButton.isChecked()) {
options.enable3D(true);
} else {
options.enable3D(false);
}
mTencentMap.updateVectorOverlay(vectorOverlay, options);
}
break;
default:
break;
}
}
};
btnSwitch3D.setOnCheckedChangeListener(onCheckedChangeListener);
}
private void addArcLineLayer() {
mIsSelected = true;
if (vectorOverlay == null) {
// mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.9229731, 116.422880668), 8, 0f, 0f)));
mTencentMap.setMapStyle(3);
int color = Color.argb(255, 0, 255, 170);
BufferedReader br = null;
final ArrayList<FromToLatLng> nodes = new ArrayList<FromToLatLng>();
try {
br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("arc.dat")));
String line = null;
while ((line = br.readLine()) != null) {
String[] lines = line.split(" ");
if (lines.length == 5) {
double arc = Double.parseDouble(lines[4]);
LatLng startLatLng = new LatLng((Double.parseDouble(lines[0])), (Double.parseDouble(lines[1])));
LatLng endLatLng = new LatLng((Double.parseDouble(lines[2])), (Double.parseDouble(lines[3])));
nodes.add(new FromToLatLng(startLatLng, endLatLng));
//nodes.add(new FromToLatLng(startLatLng, endLatLng, arc));
}
}
} catch (Exception e) {
e.printStackTrace();
}
int[] colors = {
Color.argb(255, 0, 0xd4, 0xff),
Color.argb((int) (255 * 0.3), 0, 0xd4, 0xff),
Color.argb(255, 0, 0xd4, 0xff)
};
options = new ArcLineOverlayProvider().data(nodes).opacity(2f).width(4).gradient(colors).setAnimateDuration(3000).setHighlightDuration(200).animateColor(Color.argb(255, 0xff, 0xff, 0xff));
vectorOverlay = mTencentMap.addVectorOverlay(options);
mTencentMap.setPoisEnabled(false);
}
}
}
package cc.winboll.studio.positions.demo.heatoverlay;
//import androidx.annotation.NonNull;
//import androidx.appcompat.app.AppCompatActivity;
//
//import android.graphics.Color;
//import android.os.Bundle;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.view.View;
//import android.widget.Button;
//import android.widget.CompoundButton;
//import android.widget.Switch;
//
//import com.tencent.map.sdk.utilities.visualization.datamodels.FromToLatLng;
//import com.tencent.map.sdk.utilities.visualization.od.ArcLineOverlay;
//import com.tencent.map.sdk.utilities.visualization.od.ArcLineOverlayProvider;
//import cc.winboll.studio.positions.R;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay;
//
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
//import java.util.ArrayList;
//
//public class ArcLineLayerActivity extends AppCompatActivity {
// private MapView mMapView;
// private TencentMap mTencentMap;
// private VectorOverlay vectorOverlay;
// private ArcLineOverlayProvider options;
// private Switch btnSwitch3D;
// boolean mIsSelected;
// private Switch btnani3D;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_arc_line_layer_design);
// init();
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.vectorheatmap, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
// menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_vectorheatmap:
// btnSwitch3D.setVisibility(View.VISIBLE);
// addArcLineLayer();
// break;
// case R.id.menu_close_vectorheatmap:
// mIsSelected = false;
// if (vectorOverlay != null) {
// vectorOverlay.remove();
// vectorOverlay = null;
// }
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mMapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mMapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mMapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mMapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mMapView.onStop();
// }
//
// private void init() {
// mMapView = findViewById(R.id.mapView);
// mTencentMap = mMapView.getMap();
// mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(5f));
// btnSwitch3D = (Switch) findViewById(R.id.btn_switch_3D);
// bindListener();
//
// }
//
// private void bindListener() {
// CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
//
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// switch (compoundButton.getId()) {
// case R.id.btn_switch_3D:
// if (vectorOverlay != null) {
// if (compoundButton.isChecked()) {
// options.enable3D(true);
// } else {
// options.enable3D(false);
// }
//
// mTencentMap.updateVectorOverlay(vectorOverlay, options);
// }
// break;
//
// default:
// break;
// }
// }
// };
//
// btnSwitch3D.setOnCheckedChangeListener(onCheckedChangeListener);
// }
//
// private void addArcLineLayer() {
// mIsSelected = true;
// if (vectorOverlay == null) {
// // mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(39.9229731, 116.422880668), 8, 0f, 0f)));
// mTencentMap.setMapStyle(3);
//
// int color = Color.argb(255, 0, 255, 170);
// BufferedReader br = null;
// final ArrayList<FromToLatLng> nodes = new ArrayList<FromToLatLng>();
// try {
// br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("arc.dat")));
// String line = null;
// while ((line = br.readLine()) != null) {
// String[] lines = line.split(" ");
// if (lines.length == 5) {
// double arc = Double.parseDouble(lines[4]);
// LatLng startLatLng = new LatLng((Double.parseDouble(lines[0])), (Double.parseDouble(lines[1])));
// LatLng endLatLng = new LatLng((Double.parseDouble(lines[2])), (Double.parseDouble(lines[3])));
// nodes.add(new FromToLatLng(startLatLng, endLatLng));
// //nodes.add(new FromToLatLng(startLatLng, endLatLng, arc));
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// int[] colors = {
// Color.argb(255, 0, 0xd4, 0xff),
// Color.argb((int) (255 * 0.3), 0, 0xd4, 0xff),
// Color.argb(255, 0, 0xd4, 0xff)
// };
// options = new ArcLineOverlayProvider().data(nodes).opacity(2f).width(4).gradient(colors).setAnimateDuration(3000).setHighlightDuration(200).animateColor(Color.argb(255, 0xff, 0xff, 0xff));
// vectorOverlay = mTencentMap.addVectorOverlay(options);
// mTencentMap.setPoisEnabled(false);
//
// }
// }
//}

View File

@ -20,107 +20,112 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class DrawHeatOverlayActivity extends SupportMapFragmentActivity implements HeatMapTileProvider.OnHeatMapReadyListener{
private TileOverlay mHeatmapTileOverlay;
private HeatMapTileProvider mProvider;
//热力图半径
private static final int ALT_HEATMAP_RADIUS = HeatMapTileProvider.DEFAULT_RADIUS;
//热力图透明度
private static final double ALT_HEATMAP_OPACITY = HeatMapTileProvider.DEFAULT_OPACITY;
//热力图渐变方案
public static final Gradient ALT_HEATMAP_GRADIENT = HeatMapTileProvider.DEFAULT_GRADIENT;
private static final int[] CUSTOM_GRADIENT_COLORS = {
Color.argb(0,0, 225, 225),
Color.rgb(102, 125, 200),
Color.rgb(255, 0, 0)
};
private static final float[] CUSTOM_GRADIENT_START_POINTS = {
0.0f, 0.2f, 1f
};
public static final Gradient CUSTOM_HEATMAP_GRADIENT = new Gradient(CUSTOM_GRADIENT_COLORS,
CUSTOM_GRADIENT_START_POINTS);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUpMap();
Button first = findViewById(R.id.btn_bottom);
first.setVisibility(View.VISIBLE);
first.setText("自定义热力图");
first.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProvider.setHeatTileGenerator(new HeatMapTileProvider.HeatTileGenerator() {
@Override
public double[] generateKernel(int radius) {
double[] kernel = new double[radius * 2 + 1];
for (int i = -radius; i <= radius; i++) {
kernel[i + radius] = Math.exp(-i * i / (2 * (radius / 2f) * (radius / 2f)));
}
return kernel;
}
@Override
public int[] generateColorMap(double opacity) {
return CUSTOM_HEATMAP_GRADIENT.generateColorMap(opacity);
}
});
mHeatmapTileOverlay.clearTileCache();
mHeatmapTileOverlay.reload();
}
});
}
private void setUpMap() {
tencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new com.tencent.tencentmap.mapsdk.maps.model.LatLng(39.917128, 116.399266),
7.946870f));
initHeatMap();
}
private void initHeatMap() {
BufferedReader br = null;
try {
ArrayList<WeightedLatLng> nodes = new ArrayList<>();
br = new BufferedReader(new InputStreamReader(
getResources().getAssets().open("data2k")));
String line;
while ((line = br.readLine()) != null) {
String[] lines = line.split("\t");
if (lines.length == 3) {
double value = Double.parseDouble(lines[2]);
LatLng latLng = new LatLng((Double.parseDouble(lines[1])),
(Double.parseDouble(lines[0])));
nodes.add(new WeightedLatLng(latLng, value));
}
}
mProvider = new HeatMapTileProvider.Builder()
.weightedData(nodes)
.gradient(ALT_HEATMAP_GRADIENT)
.opacity(ALT_HEATMAP_OPACITY)
.radius(ALT_HEATMAP_RADIUS)
.readyListener(this)
.build(tencentMap);
mHeatmapTileOverlay = tencentMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class DrawHeatOverlayActivity extends SupportMapFragmentActivity implements HeatMapTileProvider.OnHeatMapReadyListener {
@Override
public void onHeatMapReady() {
mHeatmapTileOverlay.clearTileCache();
mHeatmapTileOverlay.reload();
}
// private TileOverlay mHeatmapTileOverlay;
// private HeatMapTileProvider mProvider;
// //热力图半径
// private static final int ALT_HEATMAP_RADIUS = HeatMapTileProvider.DEFAULT_RADIUS;
// //热力图透明度
// private static final double ALT_HEATMAP_OPACITY = HeatMapTileProvider.DEFAULT_OPACITY;
// //热力图渐变方案
// public static final Gradient ALT_HEATMAP_GRADIENT = HeatMapTileProvider.DEFAULT_GRADIENT;
//
// private static final int[] CUSTOM_GRADIENT_COLORS = {
// Color.argb(0,0, 225, 225),
// Color.rgb(102, 125, 200),
// Color.rgb(255, 0, 0)
// };
//
// private static final float[] CUSTOM_GRADIENT_START_POINTS = {
// 0.0f, 0.2f, 1f
// };
//
// public static final Gradient CUSTOM_HEATMAP_GRADIENT = new Gradient(CUSTOM_GRADIENT_COLORS,
// CUSTOM_GRADIENT_START_POINTS);
// @Override
// public void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setUpMap();
// Button first = findViewById(R.id.btn_bottom);
// first.setVisibility(View.VISIBLE);
// first.setText("自定义热力图");
// first.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// mProvider.setHeatTileGenerator(new HeatMapTileProvider.HeatTileGenerator() {
// @Override
// public double[] generateKernel(int radius) {
// double[] kernel = new double[radius * 2 + 1];
// for (int i = -radius; i <= radius; i++) {
// kernel[i + radius] = Math.exp(-i * i / (2 * (radius / 2f) * (radius / 2f)));
// }
// return kernel;
// }
//
// @Override
// public int[] generateColorMap(double opacity) {
// return CUSTOM_HEATMAP_GRADIENT.generateColorMap(opacity);
// }
// });
// mHeatmapTileOverlay.clearTileCache();
// mHeatmapTileOverlay.reload();
// }
// });
//
// }
// private void setUpMap() {
// tencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
// new com.tencent.tencentmap.mapsdk.maps.model.LatLng(39.917128, 116.399266),
// 7.946870f));
// initHeatMap();
// }
// private void initHeatMap() {
// BufferedReader br = null;
// try {
// ArrayList<WeightedLatLng> nodes = new ArrayList<>();
// br = new BufferedReader(new InputStreamReader(
// getResources().getAssets().open("data2k")));
// String line;
// while ((line = br.readLine()) != null) {
// String[] lines = line.split("\t");
// if (lines.length == 3) {
// double value = Double.parseDouble(lines[2]);
// LatLng latLng = new LatLng((Double.parseDouble(lines[1])),
// (Double.parseDouble(lines[0])));
// nodes.add(new WeightedLatLng(latLng, value));
// }
// }
//
// mProvider = new HeatMapTileProvider.Builder()
// .weightedData(nodes)
// .gradient(ALT_HEATMAP_GRADIENT)
// .opacity(ALT_HEATMAP_OPACITY)
// .radius(ALT_HEATMAP_RADIUS)
// .readyListener(this)
// .build(tencentMap);
// mHeatmapTileOverlay = tencentMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// if (br != null) {
// try {
// br.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// }
//
// @Override
// public void onHeatMapReady() {
// mHeatmapTileOverlay.clearTileCache();
// mHeatmapTileOverlay.reload();
// }
}

View File

@ -1,166 +1,166 @@
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlay;
import com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions;
import com.tencent.tencentmap.mapsdk.maps.model.GeneralTranslateAnimator;
import com.tencent.tencentmap.mapsdk.maps.model.IAnimatorModel;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.io.File;
import java.util.Arrays;
import static com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider.CoordType.GeoGraphicType;
import static com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider.CoordType.PixelType;
public class GLModelActivity extends AppCompatActivity {
/**
* 和其他覆盖物相同三维模型图也可控制图层的Level和zIndex
* 可通过 GLModelOverlayProvider的displayLevel和zIndex进行设置
* displayLevel - 默认层级为POI之下 OverlayLevel.OverlayLevelAboveBuildings
* 相同Level内的显示层级关系通过zIndex(int)来控制zIndex越大越靠上显示 Level优先级高于zIndex displayLevel必须为如下值之一否则不生效
*/
private MapView mapView;
protected TencentMap tencentMap;
private String mResourcePath;
private GLModelOverlay vectorOverlay;
private final String mLine = "39.98409,116.30804,39.98409,116.3081,39.98409,116.3081,39.98397,116.30809,39.9823,116.30809,39.9811,116.30817,39.9811,116.30817,39.97918,116.308266,39.97918,116.308266,39.9791,116.30827,39.9791,116.30827,39.979008,116.3083,39.978756,116.3084,39.978386,116.3086,39.977867,116.30884,39.977547,116.308914,39.976845,116.308914,39.975826,116.308945,39.975826,116.308945,39.975666,116.30901,39.975716,116.310486,39.975716,116.310486,39.975754,116.31129,39.975754,116.31129,39.975784,116.31241,39.975822,116.31327,39.97581,116.31352,39.97588,116.31591,39.97588,116.31591,39.97591,116.31735,39.97591,116.31735,39.97593,116.31815,39.975967,116.31879,39.975986,116.32034,39.976055,116.32211,39.976086,116.323395,39.976105,116.32514,39.976173,116.32631,39.976254,116.32811,39.976265,116.3288,39.976345,116.33123,39.976357,116.33198,39.976418,116.33346,39.976418,116.33346,39.97653,116.333755,39.97653,116.333755,39.978157,116.333664,39.978157,116.333664,39.978195,116.33509,39.978195,116.33509,39.978226,116.33625,39.978226,116.33625,39.97823,116.33656,39.97823,116.33656,39.978256,116.33791,39.978256,116.33791,39.978016,116.33789,39.977047,116.33791,39.977047,116.33791,39.97706,116.33768,39.97706,116.33768,39.976967,116.33706,39.976967,116.33697";
private LatLng[] mCarLatLngArray;
private GeneralTranslateAnimator animator;
private Polyline polyline;
private Spinner mSpinner;
private String[] glmodelAnimator = new String[]{"开启平滑移动", "开启骨骼动画", "关闭骨骼动画"};
private GLModelOverlayProvider provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_g_l_model);
mapView = findViewById(R.id.mapView);
tencentMap = this.mapView.getMap();
String[] linePointsStr = mLine.split(",");
mCarLatLngArray = new LatLng[linePointsStr.length / 4];
for (int i = 0; i < mCarLatLngArray.length; i++) {
double latitude = Double.parseDouble(linePointsStr[i * 4]);
double longitude = Double.parseDouble(linePointsStr[i * 4 + 1]);
mCarLatLngArray[i] = new LatLng(latitude, longitude);
}
polyline = tencentMap.addPolyline(new PolylineOptions().add(mCarLatLngArray).color(R.color.colorAccent).arrow(true));
tencentMap.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), 50));
creatglmode();
init();
}
private void creatglmode() {
//gltf格式三维模型文件在assets内
String file = "BrainStem.gltf";
String SKELETON_PATH = "gltf-BrainStem";
//获取外部存储
mResourcePath = getExternalFilesDir(null).getAbsolutePath() + File.separator + SKELETON_PATH;
provider = new GLModelOverlayProvider(
mResourcePath + File.separator + file,
new LatLng(39.98409, 116.30804)).coordType(PixelType)
.pixelBounds(400, 1200).rotationX(90).rotationY(0).rotationZ(0).setClickEnable(true);
vectorOverlay = tencentMap.addVectorOverlay(provider);
}
private void init() {
mSpinner = findViewById(R.id.sp_glmode);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, glmodelAnimator);
mSpinner.setAdapter(adapter);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
//开启骨骼动画
case 0:
animator = new GeneralTranslateAnimator.Builder(vectorOverlay, 6000,
mCarLatLngArray).rotateEnabled(true).initRotate(180).modelType(GeneralTranslateAnimator.ModelType.MODEL_OVERLAY).build();
animator.startAnimation();
animator.addAnimatorEndListener(new IAnimatorModel.IAnimatorEndListener() {
@Override
public void onAnimatorEnd() {
Log.i("TransformActivity", "onAnimatorEnd");
}
});
break;
//停止骨骼动画
case 1:
vectorOverlay.playSkeletonAnimation(0, 1, true);
break;
//模型平移
case 2:
vectorOverlay.stopSkeletonAnimation();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
/**
* mapview的生命周期管理
*/
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
vectorOverlay.remove();
}
@Override
protected void onRestart() {
super.onRestart();
mapView.onRestart();
}
}
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlay;
import com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions;
import com.tencent.tencentmap.mapsdk.maps.model.GeneralTranslateAnimator;
import com.tencent.tencentmap.mapsdk.maps.model.IAnimatorModel;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.io.File;
import java.util.Arrays;
import static com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider.CoordType.GeoGraphicType;
import static com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlayProvider.CoordType.PixelType;
public class GLModelActivity extends AppCompatActivity {
//
// /**
// * 和其他覆盖物相同三维模型图也可控制图层的Level和zIndex
// * 可通过 GLModelOverlayProvider的displayLevel和zIndex进行设置
// * displayLevel - 默认层级为POI之下 OverlayLevel.OverlayLevelAboveBuildings
// * 相同Level内的显示层级关系通过zIndex(int)来控制zIndex越大越靠上显示 Level优先级高于zIndex displayLevel必须为如下值之一否则不生效
// */
//
// private MapView mapView;
// protected TencentMap tencentMap;
// private String mResourcePath;
// private GLModelOverlay vectorOverlay;
// private final String mLine = "39.98409,116.30804,39.98409,116.3081,39.98409,116.3081,39.98397,116.30809,39.9823,116.30809,39.9811,116.30817,39.9811,116.30817,39.97918,116.308266,39.97918,116.308266,39.9791,116.30827,39.9791,116.30827,39.979008,116.3083,39.978756,116.3084,39.978386,116.3086,39.977867,116.30884,39.977547,116.308914,39.976845,116.308914,39.975826,116.308945,39.975826,116.308945,39.975666,116.30901,39.975716,116.310486,39.975716,116.310486,39.975754,116.31129,39.975754,116.31129,39.975784,116.31241,39.975822,116.31327,39.97581,116.31352,39.97588,116.31591,39.97588,116.31591,39.97591,116.31735,39.97591,116.31735,39.97593,116.31815,39.975967,116.31879,39.975986,116.32034,39.976055,116.32211,39.976086,116.323395,39.976105,116.32514,39.976173,116.32631,39.976254,116.32811,39.976265,116.3288,39.976345,116.33123,39.976357,116.33198,39.976418,116.33346,39.976418,116.33346,39.97653,116.333755,39.97653,116.333755,39.978157,116.333664,39.978157,116.333664,39.978195,116.33509,39.978195,116.33509,39.978226,116.33625,39.978226,116.33625,39.97823,116.33656,39.97823,116.33656,39.978256,116.33791,39.978256,116.33791,39.978016,116.33789,39.977047,116.33791,39.977047,116.33791,39.97706,116.33768,39.97706,116.33768,39.976967,116.33706,39.976967,116.33697";
// private LatLng[] mCarLatLngArray;
// private GeneralTranslateAnimator animator;
// private Polyline polyline;
// private Spinner mSpinner;
// private String[] glmodelAnimator = new String[]{"开启平滑移动", "开启骨骼动画", "关闭骨骼动画"};
// private GLModelOverlayProvider provider;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_g_l_model);
// mapView = findViewById(R.id.mapView);
// tencentMap = this.mapView.getMap();
// String[] linePointsStr = mLine.split(",");
// mCarLatLngArray = new LatLng[linePointsStr.length / 4];
//
// for (int i = 0; i < mCarLatLngArray.length; i++) {
// double latitude = Double.parseDouble(linePointsStr[i * 4]);
// double longitude = Double.parseDouble(linePointsStr[i * 4 + 1]);
// mCarLatLngArray[i] = new LatLng(latitude, longitude);
// }
// polyline = tencentMap.addPolyline(new PolylineOptions().add(mCarLatLngArray).color(R.color.colorAccent).arrow(true));
// tencentMap.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), 50));
// creatglmode();
// init();
// }
//
// private void creatglmode() {
// //gltf格式三维模型文件在assets内
// String file = "BrainStem.gltf";
// String SKELETON_PATH = "gltf-BrainStem";
// //获取外部存储
// mResourcePath = getExternalFilesDir(null).getAbsolutePath() + File.separator + SKELETON_PATH;
// provider = new GLModelOverlayProvider(
// mResourcePath + File.separator + file,
// new LatLng(39.98409, 116.30804)).coordType(PixelType)
// .pixelBounds(400, 1200).rotationX(90).rotationY(0).rotationZ(0).setClickEnable(true);
// vectorOverlay = tencentMap.addVectorOverlay(provider);
// }
//
// private void init() {
// mSpinner = findViewById(R.id.sp_glmode);
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, glmodelAnimator);
// mSpinner.setAdapter(adapter);
// mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
// @Override
// public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// switch (position) {
// //开启骨骼动画
// case 0:
// animator = new GeneralTranslateAnimator.Builder(vectorOverlay, 6000,
// mCarLatLngArray).rotateEnabled(true).initRotate(180).modelType(GeneralTranslateAnimator.ModelType.MODEL_OVERLAY).build();
// animator.startAnimation();
// animator.addAnimatorEndListener(new IAnimatorModel.IAnimatorEndListener() {
// @Override
// public void onAnimatorEnd() {
// Log.i("TransformActivity", "onAnimatorEnd");
// }
// });
// break;
// //停止骨骼动画
// case 1:
// vectorOverlay.playSkeletonAnimation(0, 1, true);
// break;
// //模型平移
// case 2:
// vectorOverlay.stopSkeletonAnimation();
// break;
// }
// }
//
// @Override
// public void onNothingSelected(AdapterView<?> parent) {
//
// }
// });
//
// }
//
// /**
// * mapview的生命周期管理
// */
// @Override
// protected void onStart() {
// super.onStart();
// mapView.onStart();
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mapView.onResume();
// }
//
//
// @Override
// protected void onPause() {
// super.onPause();
// mapView.onPause();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mapView.onStop();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mapView.onDestroy();
// vectorOverlay.remove();
//
// }
//
// @Override
// protected void onRestart() {
// super.onRestart();
// mapView.onRestart();
// }
}

View File

@ -1,171 +1,171 @@
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import com.tencent.map.sdk.utilities.visualization.datamodels.WeightedLatLng;
import com.tencent.map.sdk.utilities.visualization.heatmap.GradientVectorOverlay;
import com.tencent.map.sdk.utilities.visualization.heatmap.GradientVectorOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class HeatMapVectorOverlayActivity extends AppCompatActivity {
private MapView mMapView;
private TencentMap mTencentMap;
private GradientVectorOverlay heatTileOverlay;
private GradientVectorOverlayProvider heatMapTileProvider;
boolean mIsSelected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_heat_map_vector_overlay_design);
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.vectorheatmap, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_vectorheatmap:
addHeatMap();
break;
case R.id.menu_close_vectorheatmap:
mIsSelected = false;
if (heatTileOverlay != null) {
heatTileOverlay.remove();
heatTileOverlay = null;
}
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mMapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mMapView.onStop();
}
private void init() {
mMapView = findViewById(R.id.mapView);
mTencentMap = mMapView.getMap();
mTencentMap.setMapStyle(3);
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(31.085414, 111.024319),
4,
20f,
1f));
mTencentMap.moveCamera(cameraSigma);
}
private void addHeatMap() {
mIsSelected = true;
if (heatTileOverlay != null) {
return;
}
mTencentMap.setBuildingEnable(false);
mTencentMap.setPoisEnabled(false);
BufferedReader br = null;
try {
ArrayList<WeightedLatLng> nodes = new ArrayList<WeightedLatLng>();
br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("data2k")));
String line = null;
while ((line = br.readLine()) != null) {
String[] lines = line.split("\t");
if (lines.length == 3) {
double value = Double.parseDouble(lines[2]);
LatLng latLng = new LatLng((Double.parseDouble(lines[1])), (Double.parseDouble(lines[0])));
nodes.add(new WeightedLatLng(latLng, value));
}
}
// 通用配色1
int[] colors = {
Color.argb(255, 77, 111, 255),
Color.argb(255, 0, 238, 227),
Color.argb(255, 113, 236, 80),
Color.argb(255, 255, 176, 0),
Color.argb(255, 255, 72, 0)
};
float[] startPoints = {0.1f, 0.185f, 0.3571f, 0.6142f, 1f};
heatMapTileProvider = new GradientVectorOverlayProvider()
.weightedData(nodes).enable3D(true)
.radius(56).setMaxHeight(500).setAnimateDuration(3000);
heatMapTileProvider.opacity(0.95f);
heatMapTileProvider.gradient(colors, startPoints);
heatTileOverlay = mTencentMap.addVectorOverlay(heatMapTileProvider);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import com.tencent.map.sdk.utilities.visualization.datamodels.WeightedLatLng;
import com.tencent.map.sdk.utilities.visualization.heatmap.GradientVectorOverlay;
import com.tencent.map.sdk.utilities.visualization.heatmap.GradientVectorOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class HeatMapVectorOverlayActivity extends AppCompatActivity {
// private MapView mMapView;
// private TencentMap mTencentMap;
// private GradientVectorOverlay heatTileOverlay;
// private GradientVectorOverlayProvider heatMapTileProvider;
// boolean mIsSelected;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_heat_map_vector_overlay_design);
// init();
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.vectorheatmap, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
// menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_vectorheatmap:
// addHeatMap();
// break;
// case R.id.menu_close_vectorheatmap:
// mIsSelected = false;
// if (heatTileOverlay != null) {
// heatTileOverlay.remove();
// heatTileOverlay = null;
// }
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mMapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mMapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mMapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mMapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mMapView.onStop();
// }
//
// private void init() {
// mMapView = findViewById(R.id.mapView);
// mTencentMap = mMapView.getMap();
// mTencentMap.setMapStyle(3);
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(31.085414, 111.024319),
// 4,
// 20f,
// 1f));
// mTencentMap.moveCamera(cameraSigma);
// }
//
//
// private void addHeatMap() {
// mIsSelected = true;
// if (heatTileOverlay != null) {
// return;
// }
// mTencentMap.setBuildingEnable(false);
// mTencentMap.setPoisEnabled(false);
// BufferedReader br = null;
// try {
// ArrayList<WeightedLatLng> nodes = new ArrayList<WeightedLatLng>();
// br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("data2k")));
// String line = null;
// while ((line = br.readLine()) != null) {
// String[] lines = line.split("\t");
// if (lines.length == 3) {
// double value = Double.parseDouble(lines[2]);
// LatLng latLng = new LatLng((Double.parseDouble(lines[1])), (Double.parseDouble(lines[0])));
// nodes.add(new WeightedLatLng(latLng, value));
// }
// }
//
// // 通用配色1
// int[] colors = {
// Color.argb(255, 77, 111, 255),
// Color.argb(255, 0, 238, 227),
// Color.argb(255, 113, 236, 80),
// Color.argb(255, 255, 176, 0),
// Color.argb(255, 255, 72, 0)
// };
// float[] startPoints = {0.1f, 0.185f, 0.3571f, 0.6142f, 1f};
//
//
// heatMapTileProvider = new GradientVectorOverlayProvider()
// .weightedData(nodes).enable3D(true)
// .radius(56).setMaxHeight(500).setAnimateDuration(3000);
// heatMapTileProvider.opacity(0.95f);
// heatMapTileProvider.gradient(colors, startPoints);
// heatTileOverlay = mTencentMap.addVectorOverlay(heatMapTileProvider);
//
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// if (br != null) {
// try {
// br.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// }
}

View File

@ -1,180 +1,180 @@
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.Spinner;
import android.widget.Switch;
import com.tencent.map.sdk.utilities.visualization.datamodels.ScatterLatLng;
import com.tencent.map.sdk.utilities.visualization.scatterplot.BitmapScatterPlotOverlayProvider;
import com.tencent.map.sdk.utilities.visualization.scatterplot.DotScatterPlotOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Random;
public class ScatterPlotOverlayActivity extends AppCompatActivity {
private MapView mMapView;
private TencentMap mTencentMap;
private VectorOverlay vectorOverlay;
boolean mIsSelected;
private DotScatterPlotOverlayProvider dotScatterPlotOverlayProvider;
private BitmapScatterPlotOverlayProvider provider;
private String[] styles = new String[]{"添加点散点", "添加图片散点"};
private Spinner mSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scatter_plot_overlay);
init();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mMapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mMapView.onStop();
}
private void init() {
mMapView = findViewById(R.id.mapView);
mTencentMap = mMapView.getMap();
mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(5f));
mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(40.040219, 116.273348), 20, 0, 0)));
mSpinner = findViewById(R.id.sp_style);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, styles);
mSpinner.setAdapter(adapter);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
if (vectorOverlay != null) {
vectorOverlay.remove();
vectorOverlay = null;
}
addDotVectorOverlay();
mTencentMap.updateVectorOverlay(vectorOverlay, dotScatterPlotOverlayProvider);
break;
case 1:
if (vectorOverlay != null) {
vectorOverlay.remove();
vectorOverlay = null;
}
addBitmapVectorOverlay();
mTencentMap.updateVectorOverlay(vectorOverlay, provider);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private void addDotVectorOverlay() {
mIsSelected = true;
if (vectorOverlay == null) {
BufferedReader br = null;
final ArrayList<ScatterLatLng> nodes = new ArrayList<ScatterLatLng>();
double lat = 40.040219;
double lng = 116.273348;
double value = 100;
Random r = new Random();
for (int i = 0; i < 2000; i++) {
double a = r.nextInt(10) * 1E-5;
double b = r.nextInt(10) * 1E-5;
LatLng latLng = new LatLng(lat + a, lng + b);
nodes.add(new ScatterLatLng(latLng, value));
}
int[] colors = {
Color.argb(255, 0, 0xd4, 0xff),
Color.argb((int) (255 * 0.3), 0, 0xd4, 0xff),
Color.argb(255, 0, 0xd4, 0xff)
};
dotScatterPlotOverlayProvider = new DotScatterPlotOverlayProvider().data(nodes).opacity(2f).radius(2).animate(true).colors(colors);
vectorOverlay = mTencentMap.addVectorOverlay(dotScatterPlotOverlayProvider);
}
}
private void addBitmapVectorOverlay() {
mIsSelected = true;
if (vectorOverlay == null) {
final ArrayList<ScatterLatLng> nodes = new ArrayList<ScatterLatLng>();
double lat = 40.040219;
double lng = 116.273348;
double value = 10;
Random r = new Random();
for (int i = 0; i < 1000; i++) {
double a = r.nextInt(10) * 1E-5;
double b = r.nextInt(10) * 1E-5;
LatLng latLng = new LatLng(lat + a, lng + b);
nodes.add(new ScatterLatLng(latLng, value));
}
BitmapDescriptor[] bitmaps = {
BitmapDescriptorFactory.fromAsset("21.jpg"),
BitmapDescriptorFactory.fromAsset("22.jpg"),
BitmapDescriptorFactory.fromAsset("23.jpg"),
BitmapDescriptorFactory.fromAsset("24.jpg"),
BitmapDescriptorFactory.fromAsset("25.jpg"),
BitmapDescriptorFactory.fromAsset("26.jpg"),
};
provider = new BitmapScatterPlotOverlayProvider().data(nodes).bitmaps(bitmaps).opacity(2f).scale(20, 10);
vectorOverlay = mTencentMap.addVectorOverlay(provider);
}
}
}
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.Spinner;
import android.widget.Switch;
import com.tencent.map.sdk.utilities.visualization.datamodels.ScatterLatLng;
import com.tencent.map.sdk.utilities.visualization.scatterplot.BitmapScatterPlotOverlayProvider;
import com.tencent.map.sdk.utilities.visualization.scatterplot.DotScatterPlotOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Random;
public class ScatterPlotOverlayActivity extends AppCompatActivity {
// private MapView mMapView;
// private TencentMap mTencentMap;
// private VectorOverlay vectorOverlay;
// boolean mIsSelected;
// private DotScatterPlotOverlayProvider dotScatterPlotOverlayProvider;
// private BitmapScatterPlotOverlayProvider provider;
// private String[] styles = new String[]{"添加点散点", "添加图片散点"};
// private Spinner mSpinner;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_scatter_plot_overlay);
// init();
// }
//
//
// @Override
// protected void onResume() {
// super.onResume();
// mMapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mMapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mMapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mMapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mMapView.onStop();
// }
//
// private void init() {
// mMapView = findViewById(R.id.mapView);
// mTencentMap = mMapView.getMap();
// mTencentMap.moveCamera(CameraUpdateFactory.zoomTo(5f));
// mTencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(40.040219, 116.273348), 20, 0, 0)));
// mSpinner = findViewById(R.id.sp_style);
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, styles);
// mSpinner.setAdapter(adapter);
// mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
// @Override
// public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// switch (position) {
// case 0:
// if (vectorOverlay != null) {
// vectorOverlay.remove();
// vectorOverlay = null;
// }
// addDotVectorOverlay();
// mTencentMap.updateVectorOverlay(vectorOverlay, dotScatterPlotOverlayProvider);
// break;
// case 1:
// if (vectorOverlay != null) {
// vectorOverlay.remove();
// vectorOverlay = null;
// }
// addBitmapVectorOverlay();
// mTencentMap.updateVectorOverlay(vectorOverlay, provider);
// break;
// }
// }
//
// @Override
// public void onNothingSelected(AdapterView<?> parent) {
//
// }
// });
//
// }
//
//
// private void addDotVectorOverlay() {
// mIsSelected = true;
// if (vectorOverlay == null) {
// BufferedReader br = null;
// final ArrayList<ScatterLatLng> nodes = new ArrayList<ScatterLatLng>();
// double lat = 40.040219;
// double lng = 116.273348;
// double value = 100;
// Random r = new Random();
// for (int i = 0; i < 2000; i++) {
// double a = r.nextInt(10) * 1E-5;
// double b = r.nextInt(10) * 1E-5;
// LatLng latLng = new LatLng(lat + a, lng + b);
// nodes.add(new ScatterLatLng(latLng, value));
// }
// int[] colors = {
// Color.argb(255, 0, 0xd4, 0xff),
// Color.argb((int) (255 * 0.3), 0, 0xd4, 0xff),
// Color.argb(255, 0, 0xd4, 0xff)
// };
//
// dotScatterPlotOverlayProvider = new DotScatterPlotOverlayProvider().data(nodes).opacity(2f).radius(2).animate(true).colors(colors);
//
// vectorOverlay = mTencentMap.addVectorOverlay(dotScatterPlotOverlayProvider);
//
// }
//
// }
//
// private void addBitmapVectorOverlay() {
// mIsSelected = true;
// if (vectorOverlay == null) {
// final ArrayList<ScatterLatLng> nodes = new ArrayList<ScatterLatLng>();
// double lat = 40.040219;
// double lng = 116.273348;
// double value = 10;
// Random r = new Random();
// for (int i = 0; i < 1000; i++) {
// double a = r.nextInt(10) * 1E-5;
// double b = r.nextInt(10) * 1E-5;
// LatLng latLng = new LatLng(lat + a, lng + b);
// nodes.add(new ScatterLatLng(latLng, value));
// }
// BitmapDescriptor[] bitmaps = {
// BitmapDescriptorFactory.fromAsset("21.jpg"),
// BitmapDescriptorFactory.fromAsset("22.jpg"),
// BitmapDescriptorFactory.fromAsset("23.jpg"),
// BitmapDescriptorFactory.fromAsset("24.jpg"),
// BitmapDescriptorFactory.fromAsset("25.jpg"),
// BitmapDescriptorFactory.fromAsset("26.jpg"),
// };
// provider = new BitmapScatterPlotOverlayProvider().data(nodes).bitmaps(bitmaps).opacity(2f).scale(20, 10);
// vectorOverlay = mTencentMap.addVectorOverlay(provider);
// }
//
// }
}

View File

@ -1,147 +1,147 @@
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.tencent.map.sdk.utilities.visualization.datamodels.TimeLatLng;
import com.tencent.map.sdk.utilities.visualization.datamodels.TrailLatLng;
import com.tencent.map.sdk.utilities.visualization.trails.TrailOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class TrailOverlayActivity extends AppCompatActivity {
private MapView mMapView;
private TencentMap mTencentMap;
private VectorOverlay vectorOverlay;
boolean mIsSelected;
private TrailOverlayProvider trailOverlayProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_trail_overlay);
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.vectorheatmap, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_vectorheatmap:
addArcLineLayer();
break;
case R.id.menu_close_vectorheatmap:
mIsSelected = false;
if (vectorOverlay != null) {
vectorOverlay.remove();
vectorOverlay = null;
}
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mMapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mMapView.onStop();
}
private void init() {
mMapView = findViewById(R.id.mapView);
mTencentMap = mMapView.getMap();
mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.942117, 116.33668), 11));
}
private void addArcLineLayer() {
mIsSelected = true;
if (vectorOverlay == null) {
mTencentMap.setPoisEnabled(false);
BufferedReader br = null;
long currentTime = System.currentTimeMillis();
List<TrailLatLng> startLats = new ArrayList<>();
try {
br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("trailData.dat")));
String line = null;
while ((line = br.readLine()) != null) {
String[] oneDot = line.split(",");
TimeLatLng[] timeLatLngs = new TimeLatLng[oneDot.length];
int i = 0;
for (String timeLatLng : oneDot) {
String[] values = timeLatLng.split("\t");
LatLng latlng = new LatLng((Double.parseDouble(values[0])), (Double.parseDouble(values[1])));
int timeStamp = Integer.parseInt(values[2]);
timeLatLngs[i++] = new TimeLatLng(latlng, timeStamp);
}
TrailLatLng tmp = new TrailLatLng(timeLatLngs);
startLats.add(tmp);
}
} catch (Exception e) {
e.printStackTrace();
}
int[] colors = {Color.argb(0xff, 0x00, 0x00, 0xff),
Color.argb(0x00, 0xff, 0xff, 0x00)};
trailOverlayProvider = new TrailOverlayProvider().type(TrailOverlayProvider.TrailOverlayType.Trail).data(startLats).opacity(2f).width(10).gradient(colors).setHighlightDuration(8000).setAnimateStartTime(0, 25000);
vectorOverlay = mTencentMap.addVectorOverlay(trailOverlayProvider);
}
}
}
package cc.winboll.studio.positions.demo.heatoverlay;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.tencent.map.sdk.utilities.visualization.datamodels.TimeLatLng;
import com.tencent.map.sdk.utilities.visualization.datamodels.TrailLatLng;
import com.tencent.map.sdk.utilities.visualization.trails.TrailOverlayProvider;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.VectorOverlay;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class TrailOverlayActivity extends AppCompatActivity {
// private MapView mMapView;
// private TencentMap mTencentMap;
// private VectorOverlay vectorOverlay;
// boolean mIsSelected;
// private TrailOverlayProvider trailOverlayProvider;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_trail_overlay);
// init();
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.vectorheatmap, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
// menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_vectorheatmap:
// addArcLineLayer();
// break;
// case R.id.menu_close_vectorheatmap:
// mIsSelected = false;
// if (vectorOverlay != null) {
// vectorOverlay.remove();
// vectorOverlay = null;
// }
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mMapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mMapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mMapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mMapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mMapView.onStop();
// }
//
// private void init() {
// mMapView = findViewById(R.id.mapView);
// mTencentMap = mMapView.getMap();
// mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.942117, 116.33668), 11));
// }
//
// private void addArcLineLayer() {
// mIsSelected = true;
// if (vectorOverlay == null) {
//
// mTencentMap.setPoisEnabled(false);
// BufferedReader br = null;
// long currentTime = System.currentTimeMillis();
// List<TrailLatLng> startLats = new ArrayList<>();
// try {
// br = new BufferedReader(new InputStreamReader(getResources().getAssets().open("trailData.dat")));
//
// String line = null;
// while ((line = br.readLine()) != null) {
// String[] oneDot = line.split(",");
// TimeLatLng[] timeLatLngs = new TimeLatLng[oneDot.length];
// int i = 0;
// for (String timeLatLng : oneDot) {
// String[] values = timeLatLng.split("\t");
// LatLng latlng = new LatLng((Double.parseDouble(values[0])), (Double.parseDouble(values[1])));
// int timeStamp = Integer.parseInt(values[2]);
// timeLatLngs[i++] = new TimeLatLng(latlng, timeStamp);
// }
// TrailLatLng tmp = new TrailLatLng(timeLatLngs);
// startLats.add(tmp);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// int[] colors = {Color.argb(0xff, 0x00, 0x00, 0xff),
// Color.argb(0x00, 0xff, 0xff, 0x00)};
//
// trailOverlayProvider = new TrailOverlayProvider().type(TrailOverlayProvider.TrailOverlayType.Trail).data(startLats).opacity(2f).width(10).gradient(colors).setHighlightDuration(8000).setAnimateStartTime(0, 25000);
// vectorOverlay = mTencentMap.addVectorOverlay(trailOverlayProvider);
//
//
// }
//
// }
}

View File

@ -32,151 +32,151 @@ import java.util.ArrayList;
*/
public class VectorHeatMapActivity extends SupportMapFragmentActivity {
MapView mMapView;
TencentMap mTencentMap;
VectorHeatOverlay mOverlay;
boolean mIsSelected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vector_heat_map);
mMapView = findViewById(R.id.map_view);
mTencentMap = mMapView.getMap();
mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(36.139985, 120.402243),
11));
mTencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latlng) {
if (mOverlay == null) {
return;
}
VectorHeatAggregationUnit unit = mOverlay.getUnit(latlng);
if (unit == null) {
Log.e("VectorHeatMapActivity", "no unit found");
return;
}
Log.e("VectorHeatMapActivity", "unit center:" + unit.getCenter() +
", intensity:" + unit.getIntensity() +
", size:" + unit.getNodes().length);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.vectorheatmap, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_vectorheatmap:
addVectorHeatMap();
break;
case R.id.menu_close_vectorheatmap:
removeVectorHeatMap();
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
private ArrayList<WeightedLatLng> getHeatNodes() {
BufferedReader br = null;
ArrayList<WeightedLatLng> nodes = null;
try {
nodes = new ArrayList<>();
br = new BufferedReader(new InputStreamReader(
getResources().getAssets().open("honeycomb.txt")));
String line;
while ((line = br.readLine()) != null) {
String[] lines = line.split("\t");
if (lines.length == 3) {
double value = Double.parseDouble(lines[2]);
LatLng latLng = new LatLng((Double.parseDouble(lines[1])),
(Double.parseDouble(lines[0])));
nodes.add(new WeightedLatLng(latLng, 1));
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return nodes;
}
}
@Override
protected void onResume() {
super.onResume();
if (mMapView != null) {
mMapView.onResume();
}
}
@Override
protected void onPause() {
super.onPause();
if (mMapView != null) {
mMapView.onPause();
}
}
@Override
protected void onStop() {
super.onStop();
if (mMapView != null) {
mMapView.onStop();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mMapView != null) {
mMapView.onDestroy();
}
}
private void addVectorHeatMap() {
mIsSelected = true;
if (mOverlay != null) {
return;
}
WeightedLatLng[] nodes = getHeatNodes().toArray(new WeightedLatLng[0]);
VectorHeatOverlayOptions options = new VectorHeatOverlayOptions()
.nodes(nodes)
.size(2000)
.gap(100)
.colors(new int[]{0x45fa4b14, 0x99fa4b14, 0xd9fa4b14})
.startPoints(new double[]{0, 0.6, 0.8});
mOverlay = mTencentMap.addVectorHeatOverlay(options);
}
public void removeVectorHeatMap() {
mIsSelected = false;
if (mOverlay == null) {
return;
}
mOverlay.remove();
mOverlay = null;
}
// MapView mMapView;
// TencentMap mTencentMap;
// VectorHeatOverlay mOverlay;
// boolean mIsSelected;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_vector_heat_map);
// mMapView = findViewById(R.id.map_view);
// mTencentMap = mMapView.getMap();
// mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
// new LatLng(36.139985, 120.402243),
// 11));
//
// mTencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() {
// @Override
// public void onMapClick(LatLng latlng) {
// if (mOverlay == null) {
// return;
// }
// VectorHeatAggregationUnit unit = mOverlay.getUnit(latlng);
// if (unit == null) {
// Log.e("VectorHeatMapActivity", "no unit found");
// return;
// }
// Log.e("VectorHeatMapActivity", "unit center:" + unit.getCenter() +
// ", intensity:" + unit.getIntensity() +
// ", size:" + unit.getNodes().length);
// }
// });
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.vectorheatmap, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_vectorheatmap).setVisible(!mIsSelected);
// menu.findItem(R.id.menu_close_vectorheatmap).setVisible(mIsSelected);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_vectorheatmap:
// addVectorHeatMap();
// break;
// case R.id.menu_close_vectorheatmap:
// removeVectorHeatMap();
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// private ArrayList<WeightedLatLng> getHeatNodes() {
// BufferedReader br = null;
// ArrayList<WeightedLatLng> nodes = null;
// try {
// nodes = new ArrayList<>();
// br = new BufferedReader(new InputStreamReader(
// getResources().getAssets().open("honeycomb.txt")));
// String line;
// while ((line = br.readLine()) != null) {
// String[] lines = line.split("\t");
// if (lines.length == 3) {
// double value = Double.parseDouble(lines[2]);
// LatLng latLng = new LatLng((Double.parseDouble(lines[1])),
// (Double.parseDouble(lines[0])));
// nodes.add(new WeightedLatLng(latLng, 1));
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// if (br != null) {
// try {
// br.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// return nodes;
// }
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// if (mMapView != null) {
// mMapView.onResume();
// }
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// if (mMapView != null) {
// mMapView.onPause();
// }
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// if (mMapView != null) {
// mMapView.onStop();
// }
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// if (mMapView != null) {
// mMapView.onDestroy();
// }
// }
//
// private void addVectorHeatMap() {
// mIsSelected = true;
// if (mOverlay != null) {
// return;
// }
// WeightedLatLng[] nodes = getHeatNodes().toArray(new WeightedLatLng[0]);
// VectorHeatOverlayOptions options = new VectorHeatOverlayOptions()
// .nodes(nodes)
// .size(2000)
// .gap(100)
// .colors(new int[]{0x45fa4b14, 0x99fa4b14, 0xd9fa4b14})
// .startPoints(new double[]{0, 0.6, 0.8});
// mOverlay = mTencentMap.addVectorHeatOverlay(options);
// }
//
// public void removeVectorHeatMap() {
// mIsSelected = false;
// if (mOverlay == null) {
// return;
// }
// mOverlay.remove();
// mOverlay = null;
// }
}

View File

@ -32,220 +32,221 @@ import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle;
import java.util.List;
import pub.devrel.easypermissions.EasyPermissions;
import com.tencent.tencentmap.mapsdk.maps.LocationSource.OnLocationChangedListener;
public class LocationLayerActivity extends SupportMapFragmentActivity implements EasyPermissions.PermissionCallbacks, LocationSource, TencentLocationListener, TencentMap.OnMapLongClickListener, RadioGroup.OnCheckedChangeListener {
private OnLocationChangedListener locationChangedListener;
private TencentLocationManager locationManager;
private TencentLocationRequest locationRequest;
private MyLocationStyle locationStyle;
private RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//定位需要申请的权限
String[] perms = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_PHONE_STATE
};
if (EasyPermissions.hasPermissions(this, perms)) {//检查是否获取该权限
Log.i("location", "已获取权限");
} else {
EasyPermissions.requestPermissions(this, "必要的权限", 0, perms);
}
//设置显示定位的图标
mapUiSettings.setMyLocationButtonEnabled(true);
tencentMap.setOnMapLongClickListener(this);
radioGroup = findViewById(R.id.location_type);
radioGroup.setVisibility(View.VISIBLE);
radioGroup.setOnCheckedChangeListener(this);
//建立定位
initLocation();
//SDK版本4.3.5新增内置定位标点击回调监听
tencentMap.setMyLocationClickListener(new TencentMap.OnMyLocationClickListener() {
@Override
public boolean onMyLocationClicked(LatLng latLng) {
Toast.makeText(LocationLayerActivity.this, "内置定位标点击回调", Toast.LENGTH_SHORT).show();
return true;
}
});
}
/**
* 定位的一些初始化设置
*/
private void initLocation() {
//用于访问腾讯定位服务的类, 周期性向客户端提供位置更新
locationManager = TencentLocationManager.getInstance(this);
//设置坐标系
locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02);
//创建定位请求
locationRequest = TencentLocationRequest.create();
//设置定位周期位置监听器回调周期为3s
locationRequest.setInterval(3000);
//地图上设置定位数据源
tencentMap.setLocationSource(this);
//设置当前位置可见
tencentMap.setMyLocationEnabled(true);
//设置定位图标样式
setLocMarkerStyle();
tencentMap.setMyLocationStyle(locationStyle);
}
/**
* 设置定位图标样式
*/
private void setLocMarkerStyle() {
locationStyle = new MyLocationStyle();
//创建图标
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.location_icon));
locationStyle.icon(bitmapDescriptor);
//设置定位圆形区域的边框宽度
locationStyle.strokeWidth(3);
//设置圆区域的颜色
locationStyle.fillColor(R.color.style);
}
private Bitmap getBitMap(int resourceId) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 55;
int newHeight = 55;
float widthScale = ((float) newWidth) / width;
float heightScale = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return bitmap;
}
/**
* 实现位置监听
*
* @param tencentLocation
* @param i
* @param s
*/
@Override
public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
if (i == TencentLocation.ERROR_OK && locationChangedListener != null) {
Location location = new Location(tencentLocation.getProvider());
//设置经纬度以及精度
location.setLatitude(tencentLocation.getLatitude());
location.setLongitude(tencentLocation.getLongitude());
location.setAccuracy(tencentLocation.getAccuracy());
locationChangedListener.onLocationChanged(location);
//显示回调的实时位置信息
runOnUiThread(new Runnable() {
@Override
public void run() {
//打印tencentLocation的json字符串
// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show();
}
});
}
}
@Override
public void onStatusUpdate(String s, int i, String s1) {
//GPS, WiFi, Radio 等状态发生变化
Log.v("State changed", s + "===" + s1);
}
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
locationChangedListener = onLocationChangedListener;
int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper());
switch (err) {
case 1:
Toast.makeText(this, "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "manifest 中配置的 key 不正确", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "自动加载libtencentloc.so失败", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
@Override
public void deactivate() {
locationManager.removeUpdates(this);
locationManager = null;
locationRequest = null;
locationChangedListener = null;
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
Log.e("location quest: ", "success");
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
Log.e("location quest: ", "failed");
}
@Override
public void onMapLongClick(LatLng latLng) {
Location location = new Location("LongPressLocationProvider");
location.setLatitude(latLng.latitude);
location.setLongitude(latLng.longitude);
location.setAccuracy(20);
locationChangedListener.onLocationChanged(location);
Log.i("long click", new Gson().toJson(latLng));
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i) {
//连续定位但不会移动到地图中心点并且会跟随设备移动
case R.id.btn_follow_no_center:
initLocation();
locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);
tencentMap.setMyLocationStyle(locationStyle);
break;
//连续定位且将视角移动到地图中心定位点依照设备方向旋转并且会跟随设备移动,默认是此种类型
case R.id.btn_location_rotate:
initLocation();
locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
tencentMap.setMyLocationStyle(locationStyle);
break;
//连续定位但不会移动到地图中心点定位点依照设备方向旋转并且跟随设备移动
case R.id.btn_location_rotate_no_center:
initLocation();
locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
tencentMap.setMyLocationStyle(locationStyle);
break;
//连续定位但不会移动到地图中心点地图依照设备方向旋转并且会跟随设备移动
case R.id.btn_map_rotate_no_center:
initLocation();
locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);
tencentMap.setMyLocationStyle(locationStyle);
break;
}
}
}
//public class LocationLayerActivity extends SupportMapFragmentActivity implements EasyPermissions.PermissionCallbacks, LocationSource, TencentLocationListener, TencentMap.OnMapLongClickListener, RadioGroup.OnCheckedChangeListener {
//
// private OnLocationChangedListener locationChangedListener;
//
// private TencentLocationManager locationManager;
// private TencentLocationRequest locationRequest;
// private MyLocationStyle locationStyle;
// private RadioGroup radioGroup;
//
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
//
//
// //定位需要申请的权限
// String[] perms = {
// Manifest.permission.ACCESS_FINE_LOCATION,
// Manifest.permission.ACCESS_COARSE_LOCATION,
// Manifest.permission.READ_PHONE_STATE
// };
//
// if (EasyPermissions.hasPermissions(this, perms)) {//检查是否获取该权限
// Log.i("location", "已获取权限");
// } else {
// EasyPermissions.requestPermissions(this, "必要的权限", 0, perms);
// }
// //设置显示定位的图标
// mapUiSettings.setMyLocationButtonEnabled(true);
// tencentMap.setOnMapLongClickListener(this);
//
// radioGroup = findViewById(R.id.location_type);
// radioGroup.setVisibility(View.VISIBLE);
// radioGroup.setOnCheckedChangeListener(this);
//
// //建立定位
// initLocation();
// //SDK版本4.3.5新增内置定位标点击回调监听
// tencentMap.setMyLocationClickListener(new TencentMap.OnMyLocationClickListener() {
// @Override
// public boolean onMyLocationClicked(LatLng latLng) {
// Toast.makeText(LocationLayerActivity.this, "内置定位标点击回调", Toast.LENGTH_SHORT).show();
// return true;
// }
// });
// }
//
// /**
// * 定位的一些初始化设置
// */
// private void initLocation() {
// //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新
// locationManager = TencentLocationManager.getInstance(this);
// //设置坐标系
// locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02);
// //创建定位请求
// locationRequest = TencentLocationRequest.create();
// //设置定位周期位置监听器回调周期为3s
// locationRequest.setInterval(3000);
//
// //地图上设置定位数据源
// tencentMap.setLocationSource(this);
// //设置当前位置可见
// tencentMap.setMyLocationEnabled(true);
// //设置定位图标样式
// setLocMarkerStyle();
// tencentMap.setMyLocationStyle(locationStyle);
// }
//
// /**
// * 设置定位图标样式
// */
// private void setLocMarkerStyle() {
// locationStyle = new MyLocationStyle();
// //创建图标
// BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.location_icon));
// locationStyle.icon(bitmapDescriptor);
// //设置定位圆形区域的边框宽度
// locationStyle.strokeWidth(3);
// //设置圆区域的颜色
// locationStyle.fillColor(R.color.style);
// }
//
// private Bitmap getBitMap(int resourceId) {
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 55;
// int newHeight = 55;
// float widthScale = ((float) newWidth) / width;
// float heightScale = ((float) newHeight) / height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
// return bitmap;
// }
//
// /**
// * 实现位置监听
// *
// * @param tencentLocation
// * @param i
// * @param s
// */
// @Override
// public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
//
// if (i == TencentLocation.ERROR_OK && locationChangedListener != null) {
// Location location = new Location(tencentLocation.getProvider());
// //设置经纬度以及精度
// location.setLatitude(tencentLocation.getLatitude());
// location.setLongitude(tencentLocation.getLongitude());
// location.setAccuracy(tencentLocation.getAccuracy());
// locationChangedListener.onLocationChanged(location);
//
// //显示回调的实时位置信息
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// //打印tencentLocation的json字符串
//// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show();
// }
// });
// }
// }
//
// @Override
// public void onStatusUpdate(String s, int i, String s1) {
// //GPS, WiFi, Radio 等状态发生变化
// Log.v("State changed", s + "===" + s1);
// }
//
//
// @Override
// public void activate(OnLocationChangedListener onLocationChangedListener) {
// locationChangedListener = onLocationChangedListener;
//
// int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper());
// switch (err) {
// case 1:
// Toast.makeText(this, "设备缺少使用腾讯定位服务需要的基本条件", Toast.LENGTH_SHORT).show();
// break;
// case 2:
// Toast.makeText(this, "manifest 中配置的 key 不正确", Toast.LENGTH_SHORT).show();
// break;
// case 3:
// Toast.makeText(this, "自动加载libtencentloc.so失败", Toast.LENGTH_SHORT).show();
// break;
//
// default:
// break;
// }
// }
//
// @Override
// public void deactivate() {
// locationManager.removeUpdates(this);
// locationManager = null;
// locationRequest = null;
// locationChangedListener = null;
// }
//
// @Override
// public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
// Log.e("location quest: ", "success");
// }
//
// @Override
// public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
// Log.e("location quest: ", "failed");
// }
//
// @Override
// public void onMapLongClick(LatLng latLng) {
// Location location = new Location("LongPressLocationProvider");
// location.setLatitude(latLng.latitude);
// location.setLongitude(latLng.longitude);
// location.setAccuracy(20);
// locationChangedListener.onLocationChanged(location);
// Log.i("long click", new Gson().toJson(latLng));
// }
//
// @Override
// public void onCheckedChanged(RadioGroup radioGroup, int i) {
// switch (i) {
// //连续定位但不会移动到地图中心点并且会跟随设备移动
// case R.id.btn_follow_no_center:
//
// initLocation();
// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);
// tencentMap.setMyLocationStyle(locationStyle);
// break;
// //连续定位且将视角移动到地图中心定位点依照设备方向旋转并且会跟随设备移动,默认是此种类型
// case R.id.btn_location_rotate:
//
// initLocation();
// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
// tencentMap.setMyLocationStyle(locationStyle);
// break;
// //连续定位但不会移动到地图中心点定位点依照设备方向旋转并且跟随设备移动
// case R.id.btn_location_rotate_no_center:
//
// initLocation();
// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
// tencentMap.setMyLocationStyle(locationStyle);
// break;
// //连续定位但不会移动到地图中心点地图依照设备方向旋转并且会跟随设备移动
// case R.id.btn_map_rotate_no_center:
//
// initLocation();
// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);
// tencentMap.setMyLocationStyle(locationStyle);
// break;
// }
// }
//}

View File

@ -25,166 +25,192 @@ import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle;
import java.util.List;
import pub.devrel.easypermissions.EasyPermissions;
import com.tencent.tencentmap.mapsdk.maps.LocationSource.OnLocationChangedListener;
public class LocationPointActivity extends SupportMapFragmentActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener{
private LocationSource.OnLocationChangedListener locationChangedListener;
private TencentLocationManager locationManager;
private TencentLocationRequest locationRequest;
private MyLocationStyle locationStyle;
public class LocationPointActivity extends SupportMapFragmentActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//定位需要申请的权限
String[] perms = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_PHONE_STATE
};
if (EasyPermissions.hasPermissions(this, perms)) {//检查是否获取该权限
Log.i("location", "已获取权限");
} else {
EasyPermissions.requestPermissions(this, "必要的权限", 0, perms);
}
//设置显示定位的图标
TencentLocationManager.setUserAgreePrivacy(true);
//建立定位
initLocation();
}
/**
* 设置定位图标样式
*/
private void setLocMarkerStyle(){
locationStyle = new MyLocationStyle();
//创建图标
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
locationStyle.icon(bitmapDescriptor);
//设置定位圆形区域的边框宽度
locationStyle.strokeWidth(3);
//设置圆区域的颜色
locationStyle.fillColor(R.color.style);
tencentMap.setMyLocationStyle(locationStyle);
}
private Bitmap getBitMap(int resourceId){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 55;
int newHeight = 55;
float widthScale = ((float)newWidth)/width;
float heightScale = ((float)newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
return bitmap;
}
/**
* 定位的一些初始化设置
*/
private void initLocation(){
//用于访问腾讯定位服务的类, 周期性向客户端提供位置更新
locationManager = TencentLocationManager.getInstance(this);
//设置坐标系
locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02);
//创建定位请求
locationRequest = TencentLocationRequest.create();
//设置定位周期位置监听器回调周期为3s
locationRequest.setInterval(3000);
//地图上设置定位数据源
tencentMap.setLocationSource(this);
//设置当前位置可见
tencentMap.setMyLocationEnabled(true);
//设置定位图标样式
setLocMarkerStyle();
// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
tencentMap.setMyLocationStyle(locationStyle);
}
/**
* 实现位置监听
* @param tencentLocation
* @param i
* @param s
*/
@Override
public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
if(i == TencentLocation.ERROR_OK && locationChangedListener != null){
Location location = new Location(tencentLocation.getProvider());
//设置经纬度以及精度
location.setLatitude(tencentLocation.getLatitude());
location.setLongitude(tencentLocation.getLongitude());
location.setAccuracy(tencentLocation.getAccuracy());
locationChangedListener.onLocationChanged(location);
//显示回调的实时位置信息
runOnUiThread(new Runnable() {
@Override
public void run() {
//打印tencentLocation的json字符串
// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show();
}
});
}
public void onPermissionsGranted(int p1, List<String> p2) {
}
@Override
public void onStatusUpdate(String s, int i, String s1) {
//GPS, WiFi, Radio 等状态发生变化
Log.v("State changed", s +"===" + s1);
public void onPermissionsDenied(int p1, List<String> p2) {
}
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
locationChangedListener = onLocationChangedListener;
int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper());
switch (err) {
case 1:
Toast.makeText(this,"设备缺少使用腾讯定位服务需要的基本条件",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this,"manifest 中配置的 key 不正确",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this,"自动加载libtencentloc.so失败",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
public void activate(LocationSource.OnLocationChangedListener p1) {
}
@Override
public void deactivate() {
locationManager.removeUpdates(this);
locationManager = null;
locationRequest = null;
locationChangedListener=null;
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
Log.e("location quest: ","success");
public void onLocationChanged(TencentLocation p1, int p2, String p3) {
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
Log.e("location quest: ","failed");
public void onStatusUpdate(String p1, int p2, String p3) {
}
// private LocationSource.OnLocationChangedListener locationChangedListener;
//
// private TencentLocationManager locationManager;
// private TencentLocationRequest locationRequest;
// private MyLocationStyle locationStyle;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
//
//
// //定位需要申请的权限
// String[] perms = {
// Manifest.permission.ACCESS_FINE_LOCATION,
// Manifest.permission.ACCESS_COARSE_LOCATION,
// Manifest.permission.READ_PHONE_STATE
// };
//
// if (EasyPermissions.hasPermissions(this, perms)) {//检查是否获取该权限
// Log.i("location", "已获取权限");
// } else {
// EasyPermissions.requestPermissions(this, "必要的权限", 0, perms);
// }
// //设置显示定位的图标
// TencentLocationManager.setUserAgreePrivacy(true);
// //建立定位
// initLocation();
// }
//
//
// /**
// * 设置定位图标样式
// */
// private void setLocMarkerStyle(){
// locationStyle = new MyLocationStyle();
// //创建图标
// BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
// locationStyle.icon(bitmapDescriptor);
// //设置定位圆形区域的边框宽度
// locationStyle.strokeWidth(3);
// //设置圆区域的颜色
// locationStyle.fillColor(R.color.style);
//
// tencentMap.setMyLocationStyle(locationStyle);
// }
//
//
//
// private Bitmap getBitMap(int resourceId){
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 55;
// int newHeight = 55;
// float widthScale = ((float)newWidth)/width;
// float heightScale = ((float)newHeight)/height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
// return bitmap;
// }
//
//
//
// /**
// * 定位的一些初始化设置
// */
// private void initLocation(){
// //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新
// locationManager = TencentLocationManager.getInstance(this);
// //设置坐标系
// locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02);
// //创建定位请求
// locationRequest = TencentLocationRequest.create();
// //设置定位周期位置监听器回调周期为3s
// locationRequest.setInterval(3000);
//
// //地图上设置定位数据源
// tencentMap.setLocationSource(this);
// //设置当前位置可见
// tencentMap.setMyLocationEnabled(true);
// //设置定位图标样式
// setLocMarkerStyle();
//// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
// tencentMap.setMyLocationStyle(locationStyle);
// }
// /**
// * 实现位置监听
// * @param tencentLocation
// * @param i
// * @param s
// */
// @Override
// public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
//
// if(i == TencentLocation.ERROR_OK && locationChangedListener != null){
// Location location = new Location(tencentLocation.getProvider());
// //设置经纬度以及精度
// location.setLatitude(tencentLocation.getLatitude());
// location.setLongitude(tencentLocation.getLongitude());
// location.setAccuracy(tencentLocation.getAccuracy());
// locationChangedListener.onLocationChanged(location);
//
// //显示回调的实时位置信息
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// //打印tencentLocation的json字符串
//// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show();
// }
// });
// }
// }
//
// @Override
// public void onStatusUpdate(String s, int i, String s1) {
// //GPS, WiFi, Radio 等状态发生变化
// Log.v("State changed", s +"===" + s1);
// }
//
//
// @Override
// public void activate(OnLocationChangedListener onLocationChangedListener) {
// locationChangedListener = onLocationChangedListener;
//
// int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper());
// switch (err) {
// case 1:
// Toast.makeText(this,"设备缺少使用腾讯定位服务需要的基本条件",Toast.LENGTH_SHORT).show();
// break;
// case 2:
// Toast.makeText(this,"manifest 中配置的 key 不正确",Toast.LENGTH_SHORT).show();
// break;
// case 3:
// Toast.makeText(this,"自动加载libtencentloc.so失败",Toast.LENGTH_SHORT).show();
// break;
//
// default:
// break;
// }
// }
//
// @Override
// public void deactivate() {
// locationManager.removeUpdates(this);
// locationManager = null;
// locationRequest = null;
// locationChangedListener=null;
// }
//
// @Override
// public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
// Log.e("location quest: ","success");
// }
//
// @Override
// public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
// Log.e("location quest: ","failed");
// }
//
}

View File

@ -1,281 +1,281 @@
package cc.winboll.studio.positions.demo.marker;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.PointF;
import android.opengl.GLES20;
import android.os.Bundle;
import android.util.Log;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.CustomRender;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
/**
* OpenGL绘制
*/
public class CustomRenderActivity extends AppCompatActivity {
private static final String TAG = CustomRenderActivity.class.getSimpleName();
// 标识是否第一次绘制3D立方体
private boolean mIsFirstDraw3DCube = true;
// 立方体8个顶点坐标
private float[] mVertices = {
-1, -1, -0,
1, -1, -0,
1, 1, -0,
-1, 1, -0,
-1, -1, 1,
1, -1, 1,
1, 1, 1,
-1, 1, 1,
};
// 3D立方体顶点绘制顺序列表
private short[] mDrawIndices = {
5, 4, 0, 1, 5, 0, 6, 5, 1, 2, 6, 1,
7, 6, 2, 3, 7, 2, 4, 7, 3, 0, 4, 3,
6, 7, 4, 5, 6, 4, 1, 0, 3, 2, 1, 3
};
// 3D立方体8个顶点颜色值
private float[] mVertexColors = {
1f, 1f, 0f, 1f,
0f, 1f, 1f, 1f,
1f, 0f, 1f, 1f,
0f, 0f, 0f, 1f,
1f, 1f, 1f, 1f,
1f, 0f, 0f, 1f,
0f, 1f, 0f, 1f,
0f, 0f, 1f, 1f
};
// 立方体顶点坐标Buffer
private FloatBuffer mVertexBuffer;
// 顶点绘制顺序Buffer
private ShortBuffer mIndexBuffer;
// 立方体顶点颜色Buffer
private FloatBuffer mColorBuffer;
// 3D立方体着色器
private CubeShader mCubeShader;
private MapView mapView;
private TencentMap mMap;
private LatLng latlng = new LatLng(40.04199816,116.27479076);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_render);
mapView = findViewById(R.id.map_view);
mMap = mapView.getMap();
mMap.addOnMapLoadedCallback(new TencentMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
mMap.setCustomRender(new CubeRender());
mMap.removeOnMapLoadedCallback(this);
}
});
mMap.moveCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder()
.target(latlng).zoom(16).tilt(45).build()));
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mapView.onResume();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mapView.onDestroy();
}
private class CubeRender implements CustomRender {
private void initCubeData(float width, float height, float depth) {
// 对标地图坐标
initVertices(mVertices, width, height, depth);
// 立方体顶点数据Buffer
mVertexBuffer = ByteBuffer.allocateDirect(mVertices.length * 4)
.order(ByteOrder.nativeOrder())
.asFloatBuffer();
mVertexBuffer.put(mVertices).position(0);
// 立方体顶点绘制顺序Buffer
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(mDrawIndices.length * 4);
byteBuffer.order(ByteOrder.nativeOrder());
mIndexBuffer = byteBuffer.asShortBuffer();
mIndexBuffer.put(mDrawIndices);
mIndexBuffer.position(0);
// 立方体顶点颜色Buffer
ByteBuffer byteBuffer1 = ByteBuffer.allocateDirect(mVertexColors.length * 4);
byteBuffer1.order(ByteOrder.nativeOrder());
mColorBuffer = byteBuffer1.asFloatBuffer();
mColorBuffer.put(mVertexColors);
mColorBuffer.position(0);
}
private void initCubeShader() {
mCubeShader = new CubeShader();
mCubeShader.init();
}
private void initVertices(float[] vertices, float width, float height, float depth) {
for (int i = 0; i < vertices.length / 3; i++) {
int m = i * 3;
vertices[m] = vertices[m] * width;
vertices[m + 1] = vertices[m + 1] * height;
vertices[m + 2] = vertices[m + 2] * depth;
}
}
@Override
public void onDrawFrame() {
drawCube();
}
private void drawCube() {
if (mIsFirstDraw3DCube) {
float cubeWidth = 0.2f * 10000 / 2;
float cubeHeight = 0.2f * 10000 / 2;
float cubeDepth = 0.4f * 10000 / 2;
initCubeData(cubeWidth, cubeHeight, cubeDepth);
initCubeShader();
mIsFirstDraw3DCube = false;
}
if (null == mCubeShader) {
return;
}
// 绑定地图移动
PointF p1f = mMap.getProjection().glVertexForCoordinate(latlng);
float[] mvpMatrix = mMap.getProjection().glModelMatrix(p1f, 1);
// Step2 开始绘制设置
GLES20.glUseProgram(mCubeShader.mProgram);
checkGlError("glUseProgram");
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
checkGlError("glEnable");
//对齐矩阵
GLES20.glUniformMatrix4fv(mCubeShader.mMvpMatrix, 1, false, mvpMatrix, 0);
checkGlError("glUniformMatrix4fv");
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
// 顶点指针
GLES20.glEnableVertexAttribArray(mCubeShader.mVertex);
checkGlError("glEnableVertexAttribArray");
GLES20.glVertexAttribPointer(mCubeShader.mVertex, 3, GLES20.GL_FLOAT, false, 0, mVertexBuffer);
checkGlError("glVertexAttribPointer");
// 颜色指针
GLES20.glEnableVertexAttribArray(mCubeShader.mColor);
checkGlError("glEnableVertexAttribArray");
GLES20.glVertexAttribPointer(mCubeShader.mColor, 4, GLES20.GL_FLOAT, false, 0, mColorBuffer);
checkGlError("glVertexAttribPointer");
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
// 开始画
GLES20.glDrawElements(GLES20.GL_TRIANGLES, mDrawIndices.length, GLES20.GL_UNSIGNED_SHORT, mIndexBuffer);
checkGlError("glDrawElements");
GLES20.glDisableVertexAttribArray(mCubeShader.mVertex);
checkGlError("glDisableVertexAttribArray");
GLES20.glDisable(GLES20.GL_DEPTH_TEST);
checkGlError("glDisable");
}
}
private static class CubeShader {
int mVertex;
int mMvpMatrix;
int mColor;
int mProgram;
String vertexShader = "precision mediump float;\n" +
" attribute vec3 mVertex;//顶点数组,三维坐标\n" +
" attribute vec4 mColor;//颜色数组,三维坐标\n" +
" uniform mat4 mMvpMatrix;//mvp矩阵\n" +
" varying vec4 color;//\n" +
" void main(){\n" +
" gl_Position = mMvpMatrix * vec4(mVertex, 1.0);\n" +
" color = mColor;\n" +
" }";
String fragmentShader = "//有颜色 没有纹理\n" +
" precision mediump float;\n" +
" varying vec4 color;//\n" +
" void main(){\n" +
" gl_FragColor = color;\n" +
" }";
public void init() {
int vertexLocation = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
GLES20.glShaderSource(vertexLocation, vertexShader);
checkGlError("glShaderSource");
GLES20.glCompileShader(vertexLocation);
checkGlError("glCompileShader");
int fragmentLocation = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
GLES20.glShaderSource(fragmentLocation, fragmentShader);
checkGlError("glShaderSource");
GLES20.glCompileShader(fragmentLocation);
checkGlError("glCompileShader");
mProgram = GLES20.glCreateProgram();
GLES20.glAttachShader(mProgram, vertexLocation);
GLES20.glAttachShader(mProgram, fragmentLocation);
GLES20.glLinkProgram(mProgram);
int[] linked = new int[1];
GLES20.glGetProgramiv(mProgram, GLES20.GL_LINK_STATUS, linked, 0);
checkGlError("glLinkProgram");
if (linked[0] != GLES20.GL_TRUE) {
Log.e(TAG, "Could not link program: ");
Log.e(TAG, GLES20.glGetProgramInfoLog(mProgram));
GLES20.glDeleteProgram(mProgram);
mProgram = 0;
}
mVertex = GLES20.glGetAttribLocation(mProgram, "mVertex");
mMvpMatrix = GLES20.glGetUniformLocation(mProgram, "mMvpMatrix");
mColor = GLES20.glGetAttribLocation(mProgram, "mColor");
}
}
static void checkGlError(String op) {
int error;
while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
Log.e(TAG, op + ": glError " + error);
}
}
}
//import androidx.appcompat.app.AppCompatActivity;
//
//import android.graphics.PointF;
//import android.opengl.GLES20;
//import android.os.Bundle;
//import android.util.Log;
//
//import cc.winboll.studio.positions.R;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.CustomRender;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//
//import java.nio.ByteBuffer;
//import java.nio.ByteOrder;
//import java.nio.FloatBuffer;
//import java.nio.ShortBuffer;
//
///**
// * OpenGL绘制
// */
//public class CustomRenderActivity extends AppCompatActivity {
//
// private static final String TAG = CustomRenderActivity.class.getSimpleName();
//
// // 标识是否第一次绘制3D立方体
// private boolean mIsFirstDraw3DCube = true;
//
// // 立方体8个顶点坐标
// private float[] mVertices = {
// -1, -1, -0,
// 1, -1, -0,
// 1, 1, -0,
// -1, 1, -0,
// -1, -1, 1,
// 1, -1, 1,
// 1, 1, 1,
// -1, 1, 1,
// };
//
// // 3D立方体顶点绘制顺序列表
// private short[] mDrawIndices = {
// 5, 4, 0, 1, 5, 0, 6, 5, 1, 2, 6, 1,
// 7, 6, 2, 3, 7, 2, 4, 7, 3, 0, 4, 3,
// 6, 7, 4, 5, 6, 4, 1, 0, 3, 2, 1, 3
// };
//
// // 3D立方体8个顶点颜色值
// private float[] mVertexColors = {
// 1f, 1f, 0f, 1f,
// 0f, 1f, 1f, 1f,
// 1f, 0f, 1f, 1f,
// 0f, 0f, 0f, 1f,
// 1f, 1f, 1f, 1f,
// 1f, 0f, 0f, 1f,
// 0f, 1f, 0f, 1f,
// 0f, 0f, 1f, 1f
// };
//
// // 立方体顶点坐标Buffer
// private FloatBuffer mVertexBuffer;
//
// // 顶点绘制顺序Buffer
// private ShortBuffer mIndexBuffer;
//
// // 立方体顶点颜色Buffer
// private FloatBuffer mColorBuffer;
//
// // 3D立方体着色器
// private CubeShader mCubeShader;
//
// private MapView mapView;
//
// private TencentMap mMap;
//
// private LatLng latlng = new LatLng(40.04199816,116.27479076);
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_custom_render);
// mapView = findViewById(R.id.map_view);
// mMap = mapView.getMap();
// mMap.addOnMapLoadedCallback(new TencentMap.OnMapLoadedCallback() {
// @Override
// public void onMapLoaded() {
// mMap.setCustomRender(new CubeRender());
// mMap.removeOnMapLoadedCallback(this);
// }
// });
//
// mMap.moveCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder()
// .target(latlng).zoom(16).tilt(45).build()));
//
//
// }
//
// @Override
// protected void onResume() {
// // TODO Auto-generated method stub
// super.onResume();
// mapView.onResume();
// }
//
// @Override
// protected void onDestroy() {
// // TODO Auto-generated method stub
// super.onDestroy();
// mapView.onDestroy();
// }
//
// private class CubeRender implements CustomRender {
//
// private void initCubeData(float width, float height, float depth) {
// // 对标地图坐标
// initVertices(mVertices, width, height, depth);
//
// // 立方体顶点数据Buffer
// mVertexBuffer = ByteBuffer.allocateDirect(mVertices.length * 4)
// .order(ByteOrder.nativeOrder())
// .asFloatBuffer();
// mVertexBuffer.put(mVertices).position(0);
//
// // 立方体顶点绘制顺序Buffer
// ByteBuffer byteBuffer = ByteBuffer.allocateDirect(mDrawIndices.length * 4);
// byteBuffer.order(ByteOrder.nativeOrder());
// mIndexBuffer = byteBuffer.asShortBuffer();
// mIndexBuffer.put(mDrawIndices);
// mIndexBuffer.position(0);
//
// // 立方体顶点颜色Buffer
// ByteBuffer byteBuffer1 = ByteBuffer.allocateDirect(mVertexColors.length * 4);
// byteBuffer1.order(ByteOrder.nativeOrder());
// mColorBuffer = byteBuffer1.asFloatBuffer();
// mColorBuffer.put(mVertexColors);
// mColorBuffer.position(0);
// }
//
// private void initCubeShader() {
// mCubeShader = new CubeShader();
// mCubeShader.init();
// }
//
// private void initVertices(float[] vertices, float width, float height, float depth) {
// for (int i = 0; i < vertices.length / 3; i++) {
// int m = i * 3;
// vertices[m] = vertices[m] * width;
// vertices[m + 1] = vertices[m + 1] * height;
// vertices[m + 2] = vertices[m + 2] * depth;
// }
// }
//
// @Override
// public void onDrawFrame() {
// drawCube();
// }
//
// private void drawCube() {
//
// if (mIsFirstDraw3DCube) {
// float cubeWidth = 0.2f * 10000 / 2;
// float cubeHeight = 0.2f * 10000 / 2;
// float cubeDepth = 0.4f * 10000 / 2;
// initCubeData(cubeWidth, cubeHeight, cubeDepth);
// initCubeShader();
// mIsFirstDraw3DCube = false;
// }
//
// if (null == mCubeShader) {
// return;
// }
//
// // 绑定地图移动
// PointF p1f = mMap.getProjection().glVertexForCoordinate(latlng);
// float[] mvpMatrix = mMap.getProjection().glModelMatrix(p1f, 1);
//
// // Step2 开始绘制设置
// GLES20.glUseProgram(mCubeShader.mProgram);
// checkGlError("glUseProgram");
//
// GLES20.glEnable(GLES20.GL_DEPTH_TEST);
// checkGlError("glEnable");
//
// //对齐矩阵
// GLES20.glUniformMatrix4fv(mCubeShader.mMvpMatrix, 1, false, mvpMatrix, 0);
// checkGlError("glUniformMatrix4fv");
//
// GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
// // 顶点指针
// GLES20.glEnableVertexAttribArray(mCubeShader.mVertex);
// checkGlError("glEnableVertexAttribArray");
// GLES20.glVertexAttribPointer(mCubeShader.mVertex, 3, GLES20.GL_FLOAT, false, 0, mVertexBuffer);
// checkGlError("glVertexAttribPointer");
//
// // 颜色指针
// GLES20.glEnableVertexAttribArray(mCubeShader.mColor);
// checkGlError("glEnableVertexAttribArray");
// GLES20.glVertexAttribPointer(mCubeShader.mColor, 4, GLES20.GL_FLOAT, false, 0, mColorBuffer);
// checkGlError("glVertexAttribPointer");
//
// GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
// // 开始画
// GLES20.glDrawElements(GLES20.GL_TRIANGLES, mDrawIndices.length, GLES20.GL_UNSIGNED_SHORT, mIndexBuffer);
// checkGlError("glDrawElements");
//
// GLES20.glDisableVertexAttribArray(mCubeShader.mVertex);
// checkGlError("glDisableVertexAttribArray");
//
// GLES20.glDisable(GLES20.GL_DEPTH_TEST);
// checkGlError("glDisable");
// }
// }
//
// private static class CubeShader {
// int mVertex;
// int mMvpMatrix;
// int mColor;
// int mProgram;
//
// String vertexShader = "precision mediump float;\n" +
// " attribute vec3 mVertex;//顶点数组,三维坐标\n" +
// " attribute vec4 mColor;//颜色数组,三维坐标\n" +
// " uniform mat4 mMvpMatrix;//mvp矩阵\n" +
// " varying vec4 color;//\n" +
// " void main(){\n" +
// " gl_Position = mMvpMatrix * vec4(mVertex, 1.0);\n" +
// " color = mColor;\n" +
// " }";
//
// String fragmentShader = "//有颜色 没有纹理\n" +
// " precision mediump float;\n" +
// " varying vec4 color;//\n" +
// " void main(){\n" +
// " gl_FragColor = color;\n" +
// " }";
//
// public void init() {
// int vertexLocation = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
// GLES20.glShaderSource(vertexLocation, vertexShader);
// checkGlError("glShaderSource");
// GLES20.glCompileShader(vertexLocation);
// checkGlError("glCompileShader");
// int fragmentLocation = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
// GLES20.glShaderSource(fragmentLocation, fragmentShader);
// checkGlError("glShaderSource");
// GLES20.glCompileShader(fragmentLocation);
// checkGlError("glCompileShader");
//
// mProgram = GLES20.glCreateProgram();
// GLES20.glAttachShader(mProgram, vertexLocation);
// GLES20.glAttachShader(mProgram, fragmentLocation);
// GLES20.glLinkProgram(mProgram);
// int[] linked = new int[1];
// GLES20.glGetProgramiv(mProgram, GLES20.GL_LINK_STATUS, linked, 0);
// checkGlError("glLinkProgram");
// if (linked[0] != GLES20.GL_TRUE) {
// Log.e(TAG, "Could not link program: ");
// Log.e(TAG, GLES20.glGetProgramInfoLog(mProgram));
// GLES20.glDeleteProgram(mProgram);
// mProgram = 0;
// }
//
//
// mVertex = GLES20.glGetAttribLocation(mProgram, "mVertex");
// mMvpMatrix = GLES20.glGetUniformLocation(mProgram, "mMvpMatrix");
// mColor = GLES20.glGetAttribLocation(mProgram, "mColor");
// }
//
// }
//
// static void checkGlError(String op) {
// int error;
// while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
// Log.e(TAG, op + ": glError " + error);
// }
// }
//}

View File

@ -1,129 +1,129 @@
package cc.winboll.studio.positions.demo.marker;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.RadioGroup;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.GroundOverlay;
import com.tencent.tencentmap.mapsdk.maps.model.GroundOverlayOptions;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.OverlayLevel;
import java.util.ArrayList;
public class GroundOverlayActivity extends SupportMapFragmentActivity {
private MapView mMapView;
private TencentMap mTencentMap;
private GroundOverlay groundOverlay;
GroundOverlayOptions groundOverlayOptions;
private boolean mIsSelected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ground_overlay);
mMapView = findViewById(R.id.map_view);
mTencentMap = mMapView.getMap();
mTencentMap.setIndoorEnabled(true);
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mMapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mMapView.onStop();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.marker_groundoverlay, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_add_groundoverlay).setVisible(!mIsSelected);
menu.findItem(R.id.menu_remove_groundoverlay).setVisible(mIsSelected);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_add_groundoverlay:
addGroundOverlays();
break;
case R.id.menu_remove_groundoverlay:
removeGroundOverlays();
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
public void addGroundOverlays() {
mIsSelected = true;
LatLngBounds lb = new LatLngBounds(
new LatLng(40.045226, 116.280069),
new LatLng(40.038918, 116.271873));
groundOverlayOptions = new GroundOverlayOptions()
.bitmap(BitmapDescriptorFactory
.fromAsset("groundoverlay.jpg"))
.latLngBounds(lb)
.alpha(10);
groundOverlay = mTencentMap.addGroundOverlay(groundOverlayOptions);
mTencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(lb, 300));
}
public void removeGroundOverlays() {
mIsSelected = false;
if (groundOverlay != null) {
groundOverlay.remove();
groundOverlay = null;
}
}
}
//import androidx.annotation.NonNull;
//import androidx.appcompat.app.AppCompatActivity;
//import androidx.fragment.app.FragmentActivity;
//
//import android.os.Bundle;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.view.View;
//import android.widget.Button;
//import android.widget.RadioGroup;
//
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.GroundOverlay;
//import com.tencent.tencentmap.mapsdk.maps.model.GroundOverlayOptions;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
//import com.tencent.tencentmap.mapsdk.maps.model.OverlayLevel;
//
//import java.util.ArrayList;
//
//public class GroundOverlayActivity extends SupportMapFragmentActivity {
//
// private MapView mMapView;
// private TencentMap mTencentMap;
// private GroundOverlay groundOverlay;
// GroundOverlayOptions groundOverlayOptions;
// private boolean mIsSelected;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_ground_overlay);
// mMapView = findViewById(R.id.map_view);
// mTencentMap = mMapView.getMap();
// mTencentMap.setIndoorEnabled(true);
// }
//
//
// @Override
// protected void onResume() {
// super.onResume();
// mMapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mMapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mMapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mMapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mMapView.onStop();
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.marker_groundoverlay, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_add_groundoverlay).setVisible(!mIsSelected);
// menu.findItem(R.id.menu_remove_groundoverlay).setVisible(mIsSelected);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_add_groundoverlay:
// addGroundOverlays();
// break;
// case R.id.menu_remove_groundoverlay:
// removeGroundOverlays();
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// public void addGroundOverlays() {
// mIsSelected = true;
// LatLngBounds lb = new LatLngBounds(
// new LatLng(40.045226, 116.280069),
// new LatLng(40.038918, 116.271873));
// groundOverlayOptions = new GroundOverlayOptions()
// .bitmap(BitmapDescriptorFactory
// .fromAsset("groundoverlay.jpg"))
// .latLngBounds(lb)
// .alpha(10);
// groundOverlay = mTencentMap.addGroundOverlay(groundOverlayOptions);
// mTencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(lb, 300));
//
// }
//
// public void removeGroundOverlays() {
// mIsSelected = false;
// if (groundOverlay != null) {
// groundOverlay.remove();
// groundOverlay = null;
// }
// }
//
//}

View File

@ -17,58 +17,58 @@ import com.tencent.tencentmap.mapsdk.maps.model.Marker;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class MarkerActivity extends SupportMapFragmentActivity {
public Marker marker;
public Switch aSwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
aSwitch = findViewById(R.id.switch_map);
aSwitch.setVisibility(View.VISIBLE);
aSwitch.setText("添加标注");
setMarker();
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
setMarker();
}else {
if(marker!=null){
marker.remove();
}
}
}
});
}
/**
* 设置标注
*/
private void setMarker(){
LatLng latLng = new LatLng(39.984108,116.307557);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
MarkerOptions options = new MarkerOptions().position(latLng).icon(bitmapDescriptor);
//设置infowindow
options.title("地址");
options.snippet("中国技术交易大厦");
marker = tencentMap.addMarker(options);
marker.setInfoWindowEnable(true);
}
private Bitmap getBitMap(int resourceId){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 100;
int newHeight = 100;
float widthScale = ((float)newWidth)/width;
float heightScale = ((float)newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
return bitmap;
}
// public Marker marker;
// public Switch aSwitch;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// aSwitch = findViewById(R.id.switch_map);
// aSwitch.setVisibility(View.VISIBLE);
// aSwitch.setText("添加标注");
// setMarker();
// aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// if(isChecked){
// setMarker();
// }else {
// if(marker!=null){
// marker.remove();
// }
// }
// }
// });
//
// }
//
// /**
// * 设置标注
// */
// private void setMarker(){
// LatLng latLng = new LatLng(39.984108,116.307557);
// BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
// MarkerOptions options = new MarkerOptions().position(latLng).icon(bitmapDescriptor);
//
// //设置infowindow
// options.title("地址");
// options.snippet("中国技术交易大厦");
// marker = tencentMap.addMarker(options);
// marker.setInfoWindowEnable(true);
// }
//
//
// private Bitmap getBitMap(int resourceId){
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 100;
// int newHeight = 100;
// float widthScale = ((float)newWidth)/width;
// float heightScale = ((float)newHeight)/height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
// return bitmap;
// }
}

View File

@ -39,197 +39,197 @@ import java.util.TimerTask;
public class MarkerAnimation extends AbsMapActivity {
private int rotate = 0;
private int scale = 1;
private int alpha = 2;
private int translate = 3;
private int set = 4;
private boolean mHasAdded;
private Marker marker;
private IRotateAnimation rotateAnimation;
private IScaleAnimation scaleAnimation;
private IAlphaAnimation alphaAnimation;
private ITranslateAnimation translateAnimation;
private TencentMap tencentMap;
private IAnimationSet animationSet;
private LatLng latLng;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap mTencentMap) {
super.onCreate(savedInstanceState, mTencentMap);
tencentMap = mTencentMap;
tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.marker_animation, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_add_marker).setVisible(!mHasAdded);
menu.findItem(R.id.menu_delete_marker).setVisible(mHasAdded);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_add_marker_rotate:
tencentMap.clear();
marker = tencentMap.addMarker(setMarkerAnimation(rotate));
mHasAdded = true;
marker.setAnimation(rotateAnimation);
marker.startAnimation();
break;
case R.id.menu_add_marker_scale:
tencentMap.clear();
marker = tencentMap.addMarker(setMarkerAnimation(scale));
mHasAdded = true;
marker.setAnimation(scaleAnimation);
marker.startAnimation();
scaleAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart() {
}
@Override
public void onAnimationEnd() {
marker.startAnimation();
}
});
break;
case R.id.menu_add_marker_alpha:
tencentMap.clear();
marker = tencentMap.addMarker(setMarkerAnimation(alpha));
mHasAdded = true;
marker.setAnimation(alphaAnimation);
marker.startAnimation();
break;
case R.id.menu_add_marker_translate:
tencentMap.clear();
marker = tencentMap.addMarker(setMarkerAnimation(translate));
mHasAdded = true;
Point screenLocation = tencentMap.getProjection().toScreenLocation(latLng);
marker.setFixingPoint(screenLocation.x, screenLocation.y);
marker.setAnimation(translateAnimation);
marker.startAnimation();
translateAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart() {
}
@Override
public void onAnimationEnd() {
marker.setFixingPointEnable(false);
}
});
break;
case R.id.menu_add_marker_set:
tencentMap.clear();
marker = tencentMap.addMarker(setMarkerAnimation(set));
mHasAdded = true;
marker.setAnimation(animationSet);
marker.startAnimation();
break;
case R.id.menu_delete_marker:
if (marker != null) {
marker.remove();
marker = null;
mHasAdded = false;
}
break;
}
return super.onOptionsItemSelected(item);
}
private MarkerOptions setMarkerAnimation(int type) {
latLng = new LatLng(39.984108, 116.307557);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
MarkerOptions position = new MarkerOptions().position(latLng).icon(bitmapDescriptor);
switch (type) {
case 0:
//旋转动画
rotateAnimation = tencentMap.getMapContext().createRotateAnimation(0, 360, 0, 0, 0);
rotateAnimation.setDuration(2000);
break;
case 1:
//缩放动画
scaleAnimation = tencentMap.getMapContext().createScaleAnimation(0.0f, 1f, 0.0f, 1f);
scaleAnimation.setDuration(2000);
scaleAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
case 2:
//渐变
alphaAnimation = tencentMap.getMapContext().createAlphaAnimation(0f, 1f);
alphaAnimation.setDuration(2000);
alphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
break;
case 3:
//平移
Point point = tencentMap.getProjection().toScreenLocation(latLng);
point.y -= dip2px(this, 250);
LatLng target = tencentMap.getProjection().fromScreenLocation(point);
translateAnimation = tencentMap.getMapContext().createTranslateAnimation(target);
translateAnimation.setInterpolator(new Interpolator() {
@Override
public float getInterpolation(float v) {
if (v <= 0.5f) {
return (float) (0.5f - 2 * (0.5 - v) * (0.5 - v));
} else {
return (float) (0.5f - Math.sqrt((v - 0.5f) * (1.5f - v)));
}
}
});
translateAnimation.setDuration(2000);
break;
case 4:
//组合动画
animationSet = tencentMap.getMapContext().createAnimationSet(true);
if (rotateAnimation != null || scaleAnimation != null || alphaAnimation != null) {
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(alphaAnimation);
}
break;
default:
throw new IllegalStateException("Unexpected value: " + type);
}
return position;
}
private static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 1.5f);
}
private Bitmap getBitMap(int resourceId) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 100;
int newHeight = 100;
float widthScale = ((float) newWidth) / width;
float heightScale = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return bitmap;
}
// private int rotate = 0;
// private int scale = 1;
// private int alpha = 2;
// private int translate = 3;
// private int set = 4;
// private boolean mHasAdded;
// private Marker marker;
// private IRotateAnimation rotateAnimation;
// private IScaleAnimation scaleAnimation;
// private IAlphaAnimation alphaAnimation;
// private ITranslateAnimation translateAnimation;
// private TencentMap tencentMap;
// private IAnimationSet animationSet;
// private LatLng latLng;
//
// @Override
// protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap mTencentMap) {
// super.onCreate(savedInstanceState, mTencentMap);
// tencentMap = mTencentMap;
// tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15));
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.marker_animation, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_add_marker).setVisible(!mHasAdded);
// menu.findItem(R.id.menu_delete_marker).setVisible(mHasAdded);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_add_marker_rotate:
// tencentMap.clear();
// marker = tencentMap.addMarker(setMarkerAnimation(rotate));
// mHasAdded = true;
// marker.setAnimation(rotateAnimation);
// marker.startAnimation();
// break;
//
// case R.id.menu_add_marker_scale:
// tencentMap.clear();
// marker = tencentMap.addMarker(setMarkerAnimation(scale));
// mHasAdded = true;
// marker.setAnimation(scaleAnimation);
// marker.startAnimation();
// scaleAnimation.setAnimationListener(new AnimationListener() {
// @Override
// public void onAnimationStart() {
//
// }
//
// @Override
// public void onAnimationEnd() {
// marker.startAnimation();
// }
// });
//
//
// break;
// case R.id.menu_add_marker_alpha:
// tencentMap.clear();
// marker = tencentMap.addMarker(setMarkerAnimation(alpha));
// mHasAdded = true;
// marker.setAnimation(alphaAnimation);
// marker.startAnimation();
// break;
// case R.id.menu_add_marker_translate:
// tencentMap.clear();
// marker = tencentMap.addMarker(setMarkerAnimation(translate));
// mHasAdded = true;
// Point screenLocation = tencentMap.getProjection().toScreenLocation(latLng);
//
// marker.setFixingPoint(screenLocation.x, screenLocation.y);
//
// marker.setAnimation(translateAnimation);
// marker.startAnimation();
//
// translateAnimation.setAnimationListener(new AnimationListener() {
// @Override
// public void onAnimationStart() {
//
// }
//
// @Override
// public void onAnimationEnd() {
// marker.setFixingPointEnable(false);
//
// }
// });
// break;
// case R.id.menu_add_marker_set:
// tencentMap.clear();
// marker = tencentMap.addMarker(setMarkerAnimation(set));
// mHasAdded = true;
// marker.setAnimation(animationSet);
// marker.startAnimation();
// break;
//
// case R.id.menu_delete_marker:
// if (marker != null) {
// marker.remove();
// marker = null;
// mHasAdded = false;
// }
// break;
// }
// return super.onOptionsItemSelected(item);
// }
//
// private MarkerOptions setMarkerAnimation(int type) {
// latLng = new LatLng(39.984108, 116.307557);
// BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
// MarkerOptions position = new MarkerOptions().position(latLng).icon(bitmapDescriptor);
// switch (type) {
// case 0:
// //旋转动画
// rotateAnimation = tencentMap.getMapContext().createRotateAnimation(0, 360, 0, 0, 0);
// rotateAnimation.setDuration(2000);
// break;
// case 1:
// //缩放动画
// scaleAnimation = tencentMap.getMapContext().createScaleAnimation(0.0f, 1f, 0.0f, 1f);
// scaleAnimation.setDuration(2000);
// scaleAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
//
// case 2:
// //渐变
// alphaAnimation = tencentMap.getMapContext().createAlphaAnimation(0f, 1f);
// alphaAnimation.setDuration(2000);
// alphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
//
// break;
// case 3:
// //平移
// Point point = tencentMap.getProjection().toScreenLocation(latLng);
// point.y -= dip2px(this, 250);
// LatLng target = tencentMap.getProjection().fromScreenLocation(point);
// translateAnimation = tencentMap.getMapContext().createTranslateAnimation(target);
// translateAnimation.setInterpolator(new Interpolator() {
// @Override
// public float getInterpolation(float v) {
// if (v <= 0.5f) {
// return (float) (0.5f - 2 * (0.5 - v) * (0.5 - v));
// } else {
// return (float) (0.5f - Math.sqrt((v - 0.5f) * (1.5f - v)));
// }
// }
// });
// translateAnimation.setDuration(2000);
// break;
// case 4:
// //组合动画
// animationSet = tencentMap.getMapContext().createAnimationSet(true);
// if (rotateAnimation != null || scaleAnimation != null || alphaAnimation != null) {
// animationSet.addAnimation(rotateAnimation);
// animationSet.addAnimation(scaleAnimation);
// animationSet.addAnimation(alphaAnimation);
// }
//
// break;
//
// default:
// throw new IllegalStateException("Unexpected value: " + type);
// }
// return position;
// }
//
// private static int dip2px(Context context, float dpValue) {
// final float scale = context.getResources().getDisplayMetrics().density;
// return (int) (dpValue * scale + 1.5f);
// }
//
// private Bitmap getBitMap(int resourceId) {
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 100;
// int newHeight = 100;
// float widthScale = ((float) newWidth) / width;
// float heightScale = ((float) newHeight) / height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
// return bitmap;
// }
}

View File

@ -1,25 +1,25 @@
package cc.winboll.studio.positions.demo.marker;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.Marker;
public class MarkerClickActivity extends MarkerActivity implements TencentMap.OnMarkerClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
marker.setInfoWindowEnable(false);
aSwitch.setVisibility(View.GONE);
tencentMap.setOnMarkerClickListener(this);
}
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(getApplicationContext(),"您点击了标注", Toast.LENGTH_SHORT).show();
return false;
}
}
//import android.os.Bundle;
//import android.view.View;
//import android.widget.Toast;
//
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.Marker;
//
//public class MarkerClickActivity extends MarkerActivity implements TencentMap.OnMarkerClickListener{
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// marker.setInfoWindowEnable(false);
// aSwitch.setVisibility(View.GONE);
// tencentMap.setOnMarkerClickListener(this);
// }
//
// @Override
// public boolean onMarkerClick(Marker marker) {
// Toast.makeText(getApplicationContext(),"您点击了标注", Toast.LENGTH_SHORT).show();
// return false;
// }
//}

View File

@ -20,7 +20,7 @@ import androidx.annotation.Nullable;
import cc.winboll.studio.positions.demo.AbsMapActivity;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.utils.CoordinateActivity;
//import cc.winboll.studio.positions.demo.utils.CoordinateActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
@ -54,334 +54,334 @@ import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
public class MarkerClusterActivity extends AbsMapActivity {
private TencentMap tencentMap;
private boolean mHasAdded;
//点聚合坐标数据集合
private List<MarkerClusterItem> generalItemList = new ArrayList<>();
private ClusterManager<MarkerClusterItem> markerClusterItemClusterManager;
private int i = 8;
//自定义聚合
private ClusterManager<PetaItem> petaItemClusterManager;
private ArrayList<PetaItem> petaItems;
private ArrayList<LatLng> latLngs;
private NonHierarchicalDistanceBasedAlgorithm<MarkerClusterItem> ndba;
private DefaultClusterRenderer<MarkerClusterItem> markerClusterItemDefaultClusterRenderer;
private String TAG="MarkerClusterActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap mTencentMap) {
super.onCreate(savedInstanceState, mTencentMap);
tencentMap = mTencentMap;
//tencentMap.enableMultipleInfowindow(true);
tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15));
//默认聚合管理
configDefaultCluterManger();
configCustomCluterManger();
petaItemClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<PetaItem>() {
@Override
public boolean onClusterClick(Cluster<PetaItem> cluster) {
Collection<PetaItem> items = cluster.getItems();
return false;
}
});
tencentMap.setOnCameraChangeListener(new TencentMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
}
@Override
public void onCameraChangeFinished(CameraPosition cameraPosition) {
float zoom = cameraPosition.zoom;
if (zoom < 6) {
tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager);
markerClusterItemClusterManager.addItems(getMassiveCoords());
// tencentMap.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(latLngs).build(), 20));
markerClusterItemClusterManager.cluster();
} else {
markerClusterItemClusterManager.cancel();
}
Log.d(TAG, "onCameraChangeFinished: " + zoom);
}
});
}
public class PetaItem implements ClusterItem {
private final LatLng mLatLng;
private int mDrawableResourceId;
public PetaItem(double lat, double lon, int resourceId) {
mLatLng = new LatLng(lat, lon);
mDrawableResourceId = resourceId;
}
@Override
public LatLng getPosition() {
return mLatLng;
}
public int getDrawableResourceId() {
return mDrawableResourceId;
}
}
//聚合设置
private void configDefaultCluterManger() {
//实例化点聚合管理者
markerClusterItemClusterManager = new ClusterManager<>(this, tencentMap);
//默认聚合策略调用时不用添加如果需要其它聚合策略可以按以下修改
ndba = new NonHierarchicalDistanceBasedAlgorithm<>(this);
//设置点聚合距离
ndba.setMaxDistanceAtZoom(35);
//设置策略
markerClusterItemClusterManager.setAlgorithm(ndba);
//设置聚合渲染器按照需要设置
markerClusterItemDefaultClusterRenderer = new DefaultClusterRenderer<>(this, tencentMap, markerClusterItemClusterManager);
//设置最小聚合数量默认是4
markerClusterItemDefaultClusterRenderer.setMinClusterSize(5);
//定义聚合的分段例如当超过5个不满足10个数据显示5+
markerClusterItemDefaultClusterRenderer.setBuckets(new int[]{5, 10, 20, 50});
markerClusterItemClusterManager.setRenderer(markerClusterItemDefaultClusterRenderer);
}
//自定义聚合样式设置
private void configCustomCluterManger() {
petaItemClusterManager = new ClusterManager<>(this, tencentMap);
CustomIconClusterRenderer customIconClusterRender = new CustomIconClusterRenderer(this, tencentMap, petaItemClusterManager);
customIconClusterRender.setMinClusterSize(3);
petaItemClusterManager.setRenderer(customIconClusterRender);
}
//普通聚合
private Collection<MarkerClusterItem> getGeneralCoords() {
if (generalItemList == null || generalItemList.size() == 0) {
generalItemList = getItemWithFileName("cluster_new");
}
return generalItemList;
}
//海量聚合
private Collection<MarkerClusterItem> getMassiveCoords() {
if (generalItemList == null || generalItemList.size() == 0) {
generalItemList = getItemWithFileName("datab");
}
return generalItemList;
}
private List<MarkerClusterItem> getItemWithFileName(String cluster_new) {
ArrayList<MarkerClusterItem> arrayList = new ArrayList<>();
latLngs = new ArrayList<>();
try {
InputStream inputStream = getAssets().open(cluster_new);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
String[] data = line.split("\t");
double longitue = Double.parseDouble(data[0]);
double latitue = Double.parseDouble(data[1]);
arrayList.add(new MarkerClusterItem(latitue, longitue));
latLngs.add(new LatLng(latitue, longitue));
}
inputStream.close();
inputStreamReader.close();
bufferedReader.close();
return arrayList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.marker_cluster, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_add_marker).setVisible(!mHasAdded);
menu.findItem(R.id.menu_delete_marker).setVisible(mHasAdded);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
tencentMap.setInfoWindowAdapter(new TencentMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
LinearLayout inflate = (LinearLayout) View.inflate(getApplicationContext(), R.layout.custom_infowindow, null);
TextView title = inflate.findViewById(R.id.tv_title);
Point point = tencentMap.getProjection().toScreenLocation(marker.getPosition());
title.setText("\t\t\t\t\t\t\t\t自定义View弹窗:\n点在屏幕位置" + point);
return inflate;
}
@Override
public View getInfoContents(Marker marker) {
return null;
}
});
final IAlphaAnimation alphaAnimation_custom = tencentMap.getMapContext().createAlphaAnimation(0f, 1f);
alphaAnimation_custom.setDuration(1000);
alphaAnimation_custom.setInterpolator(new AccelerateDecelerateInterpolator());
tencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Point point = tencentMap.getProjection().toScreenLocation(marker.getPosition());
marker.setTitle(point.toString());
marker.setAnimation(alphaAnimation_custom);
marker.startAnimation();
return false;
}
});
switch (item.getItemId()) {
case R.id.menu_add_marker_general:
mHasAdded = true;
//markerClusterItemClusterManager.cancel();
tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager);
markerClusterItemClusterManager.addItems(getGeneralCoords());
LatLng position = generalItemList.get(6).getPosition();
CameraUpdate cameraUpdate;
if (i < 16) {
i++;
cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, i);
} else {
i = 6;
cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, i);
}
tencentMap.animateCamera(cameraUpdate);
markerClusterItemClusterManager.cluster();
break;
case R.id.menu_add_marker_massive:
mHasAdded = true;
tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager);
markerClusterItemClusterManager.addItems(getMassiveCoords());
LatLng position_massive = generalItemList.get(60).getPosition();
CameraUpdate cameraUpdate_massive;
if (i < 16) {
i++;
cameraUpdate_massive = CameraUpdateFactory.newLatLngZoom(position_massive, i);
} else {
i = 6;
cameraUpdate_massive = CameraUpdateFactory.newLatLngZoom(position_massive, i);
}
tencentMap.animateCamera(cameraUpdate_massive);
markerClusterItemClusterManager.cluster();
break;
case R.id.menu_add_marker_custom:
mHasAdded = true;
tencentMap.setOnCameraChangeListener(petaItemClusterManager);
addCustomClusterItem();
tencentMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.971595, 116.314316), 15));
petaItemClusterManager.cluster();
break;
case R.id.menu_delete_marker:
mHasAdded = false;
clusterReMove();
break;
}
return super.onOptionsItemSelected(item);
}
private void addCustomClusterItem() {
petaItemClusterManager.addItem(new PetaItem(39.971595, 116.294747, R.mipmap.petal_blue));
petaItemClusterManager.addItem(new PetaItem(39.971595, 116.314316, R.mipmap.petal_red));
petaItemClusterManager.addItem(new PetaItem(39.967385, 116.317063, R.mipmap.petal_green));
petaItemClusterManager.addItem(new PetaItem(39.951596, 116.302300, R.mipmap.petal_yellow));
petaItemClusterManager.addItem(new PetaItem(39.970543, 116.290627, R.mipmap.petal_orange));
petaItemClusterManager.addItem(new PetaItem(39.966333, 116.311569, R.mipmap.petal_purple));
}
//移除聚合数据
private void clusterReMove() {
markerClusterItemClusterManager.cancel();
markerClusterItemClusterManager.cluster();
generalItemList.clear();
petaItemClusterManager.cancel();
petaItemClusterManager.cluster();
tencentMap.clearAllOverlays();
}
class CustomIconClusterRenderer extends DefaultClusterRenderer<PetaItem> {
private IconGenerator mIconGenerator = new IconGenerator(getApplicationContext());
private IconGenerator mClusterIconGenerator = new IconGenerator(getApplicationContext());
private ImageView mItemImageView = new ImageView(getApplicationContext());
private ImageView mClusterImageView = new ImageView(getApplicationContext());
public CustomIconClusterRenderer(
Context context, TencentMap map, ClusterManager clusterManager) {
super(context, map, clusterManager);
mItemImageView.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
mIconGenerator.setContentView(mItemImageView);
mClusterImageView.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
mClusterIconGenerator.setContentView(mClusterImageView);
setMinClusterSize(1);
}
@Override
public void onBeforeClusterRendered(
Cluster<PetaItem> cluster, MarkerOptions markerOptions) {
int[] resources = new int[cluster.getItems().size()];
int i = 0;
for (PetaItem item : cluster.getItems()) {
resources[i++] = item.getDrawableResourceId();
}
PetalDrawable drawable = new PetalDrawable(getApplicationContext(), resources);
mClusterImageView.setImageDrawable(drawable);
Bitmap icon = mClusterIconGenerator.makeIcon();
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
}
@Override
public void onBeforeClusterItemRendered(PetaItem item, MarkerOptions markerOptions) {
mItemImageView.setImageResource(item.getDrawableResourceId());
Bitmap icon = mIconGenerator.makeIcon();
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
}
}
class MarkerClusterItem implements ClusterItem {
private final LatLng mLatLng;
public MarkerClusterItem(double lat, double lon) {
mLatLng = new LatLng(lat, lon);
}
@Override
public LatLng getPosition() {
return mLatLng;
}
}
}
//public class MarkerClusterActivity extends AbsMapActivity {
// private TencentMap tencentMap;
// private boolean mHasAdded;
// //点聚合坐标数据集合
// private List<MarkerClusterItem> generalItemList = new ArrayList<>();
// private ClusterManager<MarkerClusterItem> markerClusterItemClusterManager;
// private int i = 8;
// //自定义聚合
// private ClusterManager<PetaItem> petaItemClusterManager;
// private ArrayList<PetaItem> petaItems;
// private ArrayList<LatLng> latLngs;
// private NonHierarchicalDistanceBasedAlgorithm<MarkerClusterItem> ndba;
// private DefaultClusterRenderer<MarkerClusterItem> markerClusterItemDefaultClusterRenderer;
// private String TAG="MarkerClusterActivity";
//
// @Override
//
// protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap mTencentMap) {
// super.onCreate(savedInstanceState, mTencentMap);
// tencentMap = mTencentMap;
// //tencentMap.enableMultipleInfowindow(true);
// tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15));
// //默认聚合管理
// configDefaultCluterManger();
// configCustomCluterManger();
// petaItemClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<PetaItem>() {
// @Override
// public boolean onClusterClick(Cluster<PetaItem> cluster) {
// Collection<PetaItem> items = cluster.getItems();
//
// return false;
// }
// });
// tencentMap.setOnCameraChangeListener(new TencentMap.OnCameraChangeListener() {
// @Override
// public void onCameraChange(CameraPosition cameraPosition) {
//
// }
//
// @Override
// public void onCameraChangeFinished(CameraPosition cameraPosition) {
// float zoom = cameraPosition.zoom;
// if (zoom < 6) {
// tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager);
// markerClusterItemClusterManager.addItems(getMassiveCoords());
// // tencentMap.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(latLngs).build(), 20));
// markerClusterItemClusterManager.cluster();
//
// } else {
// markerClusterItemClusterManager.cancel();
// }
// Log.d(TAG, "onCameraChangeFinished: " + zoom);
// }
// });
// }
//
// public class PetaItem implements ClusterItem {
// private final LatLng mLatLng;
// private int mDrawableResourceId;
//
// public PetaItem(double lat, double lon, int resourceId) {
// mLatLng = new LatLng(lat, lon);
// mDrawableResourceId = resourceId;
// }
//
// @Override
// public LatLng getPosition() {
// return mLatLng;
// }
//
// public int getDrawableResourceId() {
// return mDrawableResourceId;
// }
// }
//
// //聚合设置
// private void configDefaultCluterManger() {
// //实例化点聚合管理者
// markerClusterItemClusterManager = new ClusterManager<>(this, tencentMap);
// //默认聚合策略调用时不用添加如果需要其它聚合策略可以按以下修改
// ndba = new NonHierarchicalDistanceBasedAlgorithm<>(this);
// //设置点聚合距离
// ndba.setMaxDistanceAtZoom(35);
// //设置策略
// markerClusterItemClusterManager.setAlgorithm(ndba);
// //设置聚合渲染器按照需要设置
// markerClusterItemDefaultClusterRenderer = new DefaultClusterRenderer<>(this, tencentMap, markerClusterItemClusterManager);
// //设置最小聚合数量默认是4
// markerClusterItemDefaultClusterRenderer.setMinClusterSize(5);
// //定义聚合的分段例如当超过5个不满足10个数据显示5+
// markerClusterItemDefaultClusterRenderer.setBuckets(new int[]{5, 10, 20, 50});
// markerClusterItemClusterManager.setRenderer(markerClusterItemDefaultClusterRenderer);
//
//
// }
//
// //自定义聚合样式设置
// private void configCustomCluterManger() {
// petaItemClusterManager = new ClusterManager<>(this, tencentMap);
// CustomIconClusterRenderer customIconClusterRender = new CustomIconClusterRenderer(this, tencentMap, petaItemClusterManager);
// customIconClusterRender.setMinClusterSize(3);
// petaItemClusterManager.setRenderer(customIconClusterRender);
//
// }
//
//
// //普通聚合
// private Collection<MarkerClusterItem> getGeneralCoords() {
// if (generalItemList == null || generalItemList.size() == 0) {
// generalItemList = getItemWithFileName("cluster_new");
// }
// return generalItemList;
// }
//
// //海量聚合
// private Collection<MarkerClusterItem> getMassiveCoords() {
// if (generalItemList == null || generalItemList.size() == 0) {
// generalItemList = getItemWithFileName("datab");
// }
// return generalItemList;
// }
//
// private List<MarkerClusterItem> getItemWithFileName(String cluster_new) {
// ArrayList<MarkerClusterItem> arrayList = new ArrayList<>();
// latLngs = new ArrayList<>();
// try {
// InputStream inputStream = getAssets().open(cluster_new);
// InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
// BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// String line;
// while ((line = bufferedReader.readLine()) != null) {
// String[] data = line.split("\t");
// double longitue = Double.parseDouble(data[0]);
// double latitue = Double.parseDouble(data[1]);
// arrayList.add(new MarkerClusterItem(latitue, longitue));
// latLngs.add(new LatLng(latitue, longitue));
// }
// inputStream.close();
// inputStreamReader.close();
// bufferedReader.close();
// return arrayList;
// } catch (Exception e) {
// e.printStackTrace();
// }
// return null;
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.marker_cluster, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_add_marker).setVisible(!mHasAdded);
// menu.findItem(R.id.menu_delete_marker).setVisible(mHasAdded);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// tencentMap.setInfoWindowAdapter(new TencentMap.InfoWindowAdapter() {
// @Override
// public View getInfoWindow(Marker marker) {
// LinearLayout inflate = (LinearLayout) View.inflate(getApplicationContext(), R.layout.custom_infowindow, null);
// TextView title = inflate.findViewById(R.id.tv_title);
// Point point = tencentMap.getProjection().toScreenLocation(marker.getPosition());
// title.setText("\t\t\t\t\t\t\t\t自定义View弹窗:\n点在屏幕位置" + point);
// return inflate;
// }
//
// @Override
// public View getInfoContents(Marker marker) {
// return null;
// }
// });
// final IAlphaAnimation alphaAnimation_custom = tencentMap.getMapContext().createAlphaAnimation(0f, 1f);
// alphaAnimation_custom.setDuration(1000);
// alphaAnimation_custom.setInterpolator(new AccelerateDecelerateInterpolator());
// tencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() {
// @Override
// public boolean onMarkerClick(Marker marker) {
// Point point = tencentMap.getProjection().toScreenLocation(marker.getPosition());
// marker.setTitle(point.toString());
// marker.setAnimation(alphaAnimation_custom);
// marker.startAnimation();
// return false;
// }
// });
// switch (item.getItemId()) {
// case R.id.menu_add_marker_general:
// mHasAdded = true;
// //markerClusterItemClusterManager.cancel();
// tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager);
// markerClusterItemClusterManager.addItems(getGeneralCoords());
// LatLng position = generalItemList.get(6).getPosition();
// CameraUpdate cameraUpdate;
// if (i < 16) {
// i++;
// cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, i);
// } else {
// i = 6;
// cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, i);
// }
// tencentMap.animateCamera(cameraUpdate);
// markerClusterItemClusterManager.cluster();
//
// break;
// case R.id.menu_add_marker_massive:
// mHasAdded = true;
// tencentMap.setOnCameraChangeListener(markerClusterItemClusterManager);
// markerClusterItemClusterManager.addItems(getMassiveCoords());
//
// LatLng position_massive = generalItemList.get(60).getPosition();
// CameraUpdate cameraUpdate_massive;
// if (i < 16) {
// i++;
// cameraUpdate_massive = CameraUpdateFactory.newLatLngZoom(position_massive, i);
// } else {
// i = 6;
// cameraUpdate_massive = CameraUpdateFactory.newLatLngZoom(position_massive, i);
// }
// tencentMap.animateCamera(cameraUpdate_massive);
// markerClusterItemClusterManager.cluster();
// break;
// case R.id.menu_add_marker_custom:
// mHasAdded = true;
// tencentMap.setOnCameraChangeListener(petaItemClusterManager);
// addCustomClusterItem();
// tencentMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.971595, 116.314316), 15));
// petaItemClusterManager.cluster();
// break;
// case R.id.menu_delete_marker:
// mHasAdded = false;
// clusterReMove();
// break;
//
// }
// return super.onOptionsItemSelected(item);
// }
//
// private void addCustomClusterItem() {
//
// petaItemClusterManager.addItem(new PetaItem(39.971595, 116.294747, R.mipmap.petal_blue));
//
// petaItemClusterManager.addItem(new PetaItem(39.971595, 116.314316, R.mipmap.petal_red));
//
// petaItemClusterManager.addItem(new PetaItem(39.967385, 116.317063, R.mipmap.petal_green));
//
// petaItemClusterManager.addItem(new PetaItem(39.951596, 116.302300, R.mipmap.petal_yellow));
//
// petaItemClusterManager.addItem(new PetaItem(39.970543, 116.290627, R.mipmap.petal_orange));
//
// petaItemClusterManager.addItem(new PetaItem(39.966333, 116.311569, R.mipmap.petal_purple));
// }
//
// //移除聚合数据
// private void clusterReMove() {
// markerClusterItemClusterManager.cancel();
// markerClusterItemClusterManager.cluster();
// generalItemList.clear();
// petaItemClusterManager.cancel();
// petaItemClusterManager.cluster();
// tencentMap.clearAllOverlays();
//
// }
//
// class CustomIconClusterRenderer extends DefaultClusterRenderer<PetaItem> {
//
// private IconGenerator mIconGenerator = new IconGenerator(getApplicationContext());
// private IconGenerator mClusterIconGenerator = new IconGenerator(getApplicationContext());
// private ImageView mItemImageView = new ImageView(getApplicationContext());
// private ImageView mClusterImageView = new ImageView(getApplicationContext());
//
// public CustomIconClusterRenderer(
// Context context, TencentMap map, ClusterManager clusterManager) {
// super(context, map, clusterManager);
// mItemImageView.setLayoutParams(
// new ViewGroup.LayoutParams(
// ViewGroup.LayoutParams.WRAP_CONTENT,
// ViewGroup.LayoutParams.WRAP_CONTENT));
// mIconGenerator.setContentView(mItemImageView);
//
// mClusterImageView.setLayoutParams(
// new ViewGroup.LayoutParams(
// ViewGroup.LayoutParams.WRAP_CONTENT,
// ViewGroup.LayoutParams.WRAP_CONTENT));
// mClusterIconGenerator.setContentView(mClusterImageView);
//
// setMinClusterSize(1);
// }
//
// @Override
// public void onBeforeClusterRendered(
// Cluster<PetaItem> cluster, MarkerOptions markerOptions) {
// int[] resources = new int[cluster.getItems().size()];
// int i = 0;
// for (PetaItem item : cluster.getItems()) {
// resources[i++] = item.getDrawableResourceId();
// }
//
// PetalDrawable drawable = new PetalDrawable(getApplicationContext(), resources);
// mClusterImageView.setImageDrawable(drawable);
// Bitmap icon = mClusterIconGenerator.makeIcon();
// markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
// }
//
// @Override
// public void onBeforeClusterItemRendered(PetaItem item, MarkerOptions markerOptions) {
// mItemImageView.setImageResource(item.getDrawableResourceId());
// Bitmap icon = mIconGenerator.makeIcon();
// markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
// }
// }
//
// class MarkerClusterItem implements ClusterItem {
// private final LatLng mLatLng;
//
// public MarkerClusterItem(double lat, double lon) {
// mLatLng = new LatLng(lat, lon);
// }
//
// @Override
// public LatLng getPosition() {
// return mLatLng;
// }
// }
//}

View File

@ -1,116 +1,116 @@
package cc.winboll.studio.positions.demo.marker;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.MapPoi;
import com.tencent.tencentmap.mapsdk.maps.model.Marker;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class MarkerCollisions extends AppCompatActivity {
private MapView mapView;
private TencentMap tencentMap;
private boolean mMarkerAdded;
private Marker mMarker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_marker_collisions);
intit();
}
private void intit() {
mapView = findViewById(R.id.mapView);
tencentMap = mapView.getMap();
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.984066, 116.307548),
15,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.markercol, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded);
menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_collisionsmap:
mMarkerAdded = true;
BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker);
MarkerOptions options = new MarkerOptions().position(new LatLng(39.984066, 116.307548));
options.icon(custom);
mMarker = tencentMap.addMarker(options);
mMarker.setCollisions(MarkerCollisionItem.POI);
break;
case R.id.menu_close_collisionsmap:
mMarkerAdded = false;
mMarker.remove();
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
}
package cc.winboll.studio.positions.demo.marker;
//import androidx.annotation.NonNull;
//import androidx.appcompat.app.AppCompatActivity;
//
//import android.os.Bundle;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.view.View;
//
//import cc.winboll.studio.positions.R;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.MapPoi;
//import com.tencent.tencentmap.mapsdk.maps.model.Marker;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
//
//public class MarkerCollisions extends AppCompatActivity {
//
// private MapView mapView;
// private TencentMap tencentMap;
// private boolean mMarkerAdded;
// private Marker mMarker;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_marker_collisions);
// intit();
// }
//
// private void intit() {
// mapView = findViewById(R.id.mapView);
// tencentMap = mapView.getMap();
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.984066, 116.307548),
// 15,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.markercol, menu);
// return super.onCreateOptionsMenu(menu);
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded);
// menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_collisionsmap:
// mMarkerAdded = true;
// BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker);
// MarkerOptions options = new MarkerOptions().position(new LatLng(39.984066, 116.307548));
// options.icon(custom);
// mMarker = tencentMap.addMarker(options);
// mMarker.setCollisions(MarkerCollisionItem.POI);
// break;
// case R.id.menu_close_collisionsmap:
// mMarkerAdded = false;
// mMarker.remove();
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mapView.onStop();
// }
//}

View File

@ -10,36 +10,49 @@ import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.Marker;
public class MarkerDragActivity extends MarkerActivity implements TencentMap.OnMarkerDragListener{
private TextView textView;
public class MarkerDragActivity extends MarkerActivity implements TencentMap.OnMarkerDragListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
marker.setInfoWindowEnable(false);
aSwitch.setVisibility(View.GONE);
textView = findViewById(R.id.tv_info);
textView.setText("长按标记开始拖动");
textView.setVisibility(View.VISIBLE);
marker.setDraggable(true);
tencentMap.setOnMarkerDragListener(this);
public void onMarkerDragStart(Marker p1) {
}
@Override
public void onMarkerDragStart(Marker marker) {
Log.e("marker:","drag");
Toast.makeText(this, "拖拽开始", Toast.LENGTH_SHORT).show();
public void onMarkerDrag(Marker p1) {
}
@Override
public void onMarkerDrag(Marker marker) {
}
@Override
public void onMarkerDragEnd(Marker marker) {
Toast.makeText(this, "拖拽结束", Toast.LENGTH_SHORT).show();
public void onMarkerDragEnd(Marker p1) {
}
// private TextView textView;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// marker.setInfoWindowEnable(false);
// aSwitch.setVisibility(View.GONE);
//
// textView = findViewById(R.id.tv_info);
// textView.setText("长按标记开始拖动");
// textView.setVisibility(View.VISIBLE);
//
// marker.setDraggable(true);
// tencentMap.setOnMarkerDragListener(this);
// }
//
// @Override
// public void onMarkerDragStart(Marker marker) {
// Log.e("marker:","drag");
// Toast.makeText(this, "拖拽开始", Toast.LENGTH_SHORT).show();
// }
//
// @Override
// public void onMarkerDrag(Marker marker) {
//
// }
//
// @Override
// public void onMarkerDragEnd(Marker marker) {
// Toast.makeText(this, "拖拽结束", Toast.LENGTH_SHORT).show();
// }
}

View File

@ -22,233 +22,233 @@ import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class MarkerInfoWindowActivity extends AbsMapActivity {
private static final int TYPE_BITMAP = 0;
private static final int TYPE_VIEW = 1;
private static final int STYLE_NO_FRAME = 1;
private static final int STYLE_FRAME = 2;
private Marker mMarker;
private Marker mAnotherMarker;
private TencentMap mTencentMap;
private int mInfoWindowAdapterStyle;
private int mInfoWindowType = TYPE_BITMAP;
private LinearLayout mCustomInfoWindowView;
/**
* 自定义信息窗
*/
private TencentMap.InfoWindowAdapter mInfoWindowAdapter = new TencentMap.InfoWindowAdapter() {
TextView tvTitle;
//返回View为信息窗自定义样式返回null时为默认信息窗样式
@Override
public View getInfoWindow(final Marker marker) {
if (mInfoWindowAdapterStyle == 1 && marker.equals(mMarker)) {
return createCustomInfoView(marker);
}
return null;
}
//返回View为信息窗内容自定义样式返回null时为默认信息窗样式
@Override
public View getInfoContents(Marker marker) {
if (mInfoWindowAdapterStyle == 2 && marker.equals(mMarker)) {
return createCustomInfoView(marker);
}
return null;
}
private View createCustomInfoView(Marker marker) {
mCustomInfoWindowView = (LinearLayout) View.inflate(
getApplicationContext(), R.layout.custom_infowindow, null);
tvTitle = mCustomInfoWindowView.findViewById(R.id.tv_title);
//设置自定义信息窗的内容
tvTitle.setText("我是自定义信息窗口:");
tvTitle.append("\n" + marker.getTitle());
tvTitle.append("\n" + marker.getSnippet());
return mCustomInfoWindowView;
}
};
private boolean mMultEnable;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap pTencentMap) {
super.onCreate(savedInstanceState, pTencentMap);
mTencentMap = pTencentMap;
mMarker = createMarker();
pTencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
invalidateOptionsMenu();
return false;
}
});
pTencentMap.setOnInfoWindowClickListener(new TencentMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
Toast.makeText(getApplicationContext(), "信息窗被点击", Toast.LENGTH_SHORT).show();
}
@Override
public void onInfoWindowClickLocation(int i, int i1, int i2, int i3) {
Toast.makeText(getApplicationContext(),
"尺寸:" + i + "x" + i1 + " 位置:" + i2 + "," + i3, Toast.LENGTH_SHORT).show();
}
});
}
private Marker createMarker() {
if (mTencentMap == null) {
return null;
}
if (mMarker != null) {
mMarker.remove();
mMarker = null;
}
LatLng position = new LatLng(39.908710, 116.397499);
MarkerOptions options = new MarkerOptions(position);
options.infoWindowEnable(true);//默认为true
options.title("天安门")//标注的InfoWindow的标题
.snippet("地址: 北京市东城区东长安街")//标注的InfoWindow的内容
.anchor(0.5f, 1)
.viewInfoWindow(mInfoWindowType == TYPE_VIEW)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));//设置自定义Marker图标
mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 15));
return mTencentMap.addMarker(options);
}
private Marker createMultMarker() {
if (mTencentMap == null) {
return null;
}
if (mAnotherMarker != null) {
mAnotherMarker.remove();
mAnotherMarker = null;
}
LatLng position = new LatLng(39.902500,116.397750);
MarkerOptions options = new MarkerOptions(position);
options.infoWindowEnable(true);//默认为true
options.title("毛主席纪念堂")//标注的InfoWindow的标题
.snippet("地址: 北京市东城区前门东大街11号")//标注的InfoWindow的内容
.anchor(0.5f, 1)
.viewInfoWindow(mInfoWindowType == TYPE_VIEW)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));//设置自定义Marker图标
return mTencentMap.addMarker(options);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.infowindow, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
String typeName = null;
if (mInfoWindowType == TYPE_VIEW) {
typeName = "View类型";
} else if (mInfoWindowType == TYPE_BITMAP) {
typeName = "Bitmap类型";
}
if (typeName != null) {
menu.findItem(R.id.menu_type).setTitle(typeName)
.setVisible(!mMarker.isInfoWindowShown());
}
menu.findItem(R.id.menu_mult).setTitle(mMultEnable ? "开启多窗口" : "关闭多窗口")
.setVisible(!mMarker.isInfoWindowShown());
menu.findItem(R.id.menu_add).setVisible(!mMarker.isInfoWindowShown());
menu.findItem(R.id.menu_play).setVisible(mMarker.isInfoWindowShown());
menu.findItem(R.id.menu_delete).setVisible(mMarker.isInfoWindowShown());
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_mult_enable:
mMultEnable = true;
initMarkers();
hideInfoWindow();
break;
case R.id.menu_mult_close:
mMultEnable = false;
if (mAnotherMarker != null) {
mAnotherMarker.remove();
mAnotherMarker = null;
}
hideInfoWindow();
break;
case R.id.menu_type_bitmap:
mInfoWindowType = TYPE_BITMAP;
initMarkers();
hideInfoWindow();
break;
case R.id.menu_type_view:
mInfoWindowType = TYPE_VIEW;
initMarkers();
hideInfoWindow();
break;
case R.id.menu_add_infowindow_default:
showInfoWindow();
break;
case R.id.menu_add_infowindow_custom_1:
mInfoWindowAdapterStyle = STYLE_NO_FRAME;
mTencentMap.setInfoWindowAdapter(mInfoWindowAdapter);
showInfoWindow();
break;
case R.id.menu_add_infowindow_custom_2:
mInfoWindowAdapterStyle = STYLE_FRAME;
mTencentMap.setInfoWindowAdapter(mInfoWindowAdapter);
showInfoWindow();
break;
case R.id.menu_play:
animationPlay();
break;
case R.id.menu_delete:
hideInfoWindow();
break;
}
mTencentMap.enableMultipleInfowindow(mMultEnable);
return super.onOptionsItemSelected(item);
}
private void initMarkers() {
mMarker = createMarker();
if (mMultEnable) {
mAnotherMarker = createMultMarker();
}
}
private void showInfoWindow() {
if (mMarker != null) {
mMarker.showInfoWindow();
}
if (mAnotherMarker != null && mMultEnable) {
mAnotherMarker.showInfoWindow();
}
}
private void hideInfoWindow() {
if (mMarker != null) {
mMarker.hideInfoWindow();
}
if (mAnotherMarker != null && mMultEnable) {
mAnotherMarker.hideInfoWindow();
}
mTencentMap.setInfoWindowAdapter(null);
}
private void animationPlay() {
if (mInfoWindowType == TYPE_VIEW) {
//TODO :动画
}
}
// private static final int TYPE_BITMAP = 0;
// private static final int TYPE_VIEW = 1;
//
// private static final int STYLE_NO_FRAME = 1;
// private static final int STYLE_FRAME = 2;
//
// private Marker mMarker;
// private Marker mAnotherMarker;
// private TencentMap mTencentMap;
// private int mInfoWindowAdapterStyle;
// private int mInfoWindowType = TYPE_BITMAP;
// private LinearLayout mCustomInfoWindowView;
//
// /**
// * 自定义信息窗
// */
// private TencentMap.InfoWindowAdapter mInfoWindowAdapter = new TencentMap.InfoWindowAdapter() {
//
// TextView tvTitle;
//
// //返回View为信息窗自定义样式返回null时为默认信息窗样式
// @Override
// public View getInfoWindow(final Marker marker) {
// if (mInfoWindowAdapterStyle == 1 && marker.equals(mMarker)) {
// return createCustomInfoView(marker);
// }
// return null;
// }
//
// //返回View为信息窗内容自定义样式返回null时为默认信息窗样式
// @Override
// public View getInfoContents(Marker marker) {
// if (mInfoWindowAdapterStyle == 2 && marker.equals(mMarker)) {
// return createCustomInfoView(marker);
// }
// return null;
// }
//
// private View createCustomInfoView(Marker marker) {
// mCustomInfoWindowView = (LinearLayout) View.inflate(
// getApplicationContext(), R.layout.custom_infowindow, null);
// tvTitle = mCustomInfoWindowView.findViewById(R.id.tv_title);
// //设置自定义信息窗的内容
// tvTitle.setText("我是自定义信息窗口:");
// tvTitle.append("\n" + marker.getTitle());
// tvTitle.append("\n" + marker.getSnippet());
// return mCustomInfoWindowView;
// }
// };
// private boolean mMultEnable;
//
//
// @Override
// protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap pTencentMap) {
// super.onCreate(savedInstanceState, pTencentMap);
// mTencentMap = pTencentMap;
// mMarker = createMarker();
// pTencentMap.setOnMarkerClickListener(new TencentMap.OnMarkerClickListener() {
// @Override
// public boolean onMarkerClick(Marker marker) {
// invalidateOptionsMenu();
// return false;
// }
// });
// pTencentMap.setOnInfoWindowClickListener(new TencentMap.OnInfoWindowClickListener() {
// @Override
// public void onInfoWindowClick(Marker marker) {
// Toast.makeText(getApplicationContext(), "信息窗被点击", Toast.LENGTH_SHORT).show();
// }
//
// @Override
// public void onInfoWindowClickLocation(int i, int i1, int i2, int i3) {
// Toast.makeText(getApplicationContext(),
// "尺寸:" + i + "x" + i1 + " 位置:" + i2 + "," + i3, Toast.LENGTH_SHORT).show();
// }
// });
// }
//
// private Marker createMarker() {
// if (mTencentMap == null) {
// return null;
// }
// if (mMarker != null) {
// mMarker.remove();
// mMarker = null;
// }
// LatLng position = new LatLng(39.908710, 116.397499);
// MarkerOptions options = new MarkerOptions(position);
// options.infoWindowEnable(true);//默认为true
// options.title("天安门")//标注的InfoWindow的标题
// .snippet("地址: 北京市东城区东长安街")//标注的InfoWindow的内容
// .anchor(0.5f, 1)
// .viewInfoWindow(mInfoWindowType == TYPE_VIEW)
// .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));//设置自定义Marker图标
// mTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 15));
// return mTencentMap.addMarker(options);
// }
//
// private Marker createMultMarker() {
// if (mTencentMap == null) {
// return null;
// }
// if (mAnotherMarker != null) {
// mAnotherMarker.remove();
// mAnotherMarker = null;
// }
// LatLng position = new LatLng(39.902500,116.397750);
// MarkerOptions options = new MarkerOptions(position);
// options.infoWindowEnable(true);//默认为true
// options.title("毛主席纪念堂")//标注的InfoWindow的标题
// .snippet("地址: 北京市东城区前门东大街11号")//标注的InfoWindow的内容
// .anchor(0.5f, 1)
// .viewInfoWindow(mInfoWindowType == TYPE_VIEW)
// .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));//设置自定义Marker图标
// return mTencentMap.addMarker(options);
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.infowindow, menu);
// return super.onCreateOptionsMenu(menu);
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// String typeName = null;
// if (mInfoWindowType == TYPE_VIEW) {
// typeName = "View类型";
// } else if (mInfoWindowType == TYPE_BITMAP) {
// typeName = "Bitmap类型";
// }
// if (typeName != null) {
// menu.findItem(R.id.menu_type).setTitle(typeName)
// .setVisible(!mMarker.isInfoWindowShown());
// }
// menu.findItem(R.id.menu_mult).setTitle(mMultEnable ? "开启多窗口" : "关闭多窗口")
// .setVisible(!mMarker.isInfoWindowShown());
// menu.findItem(R.id.menu_add).setVisible(!mMarker.isInfoWindowShown());
// menu.findItem(R.id.menu_play).setVisible(mMarker.isInfoWindowShown());
// menu.findItem(R.id.menu_delete).setVisible(mMarker.isInfoWindowShown());
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_mult_enable:
// mMultEnable = true;
// initMarkers();
// hideInfoWindow();
// break;
// case R.id.menu_mult_close:
// mMultEnable = false;
// if (mAnotherMarker != null) {
// mAnotherMarker.remove();
// mAnotherMarker = null;
// }
//
// hideInfoWindow();
// break;
// case R.id.menu_type_bitmap:
// mInfoWindowType = TYPE_BITMAP;
// initMarkers();
// hideInfoWindow();
// break;
// case R.id.menu_type_view:
// mInfoWindowType = TYPE_VIEW;
// initMarkers();
// hideInfoWindow();
// break;
// case R.id.menu_add_infowindow_default:
// showInfoWindow();
// break;
// case R.id.menu_add_infowindow_custom_1:
// mInfoWindowAdapterStyle = STYLE_NO_FRAME;
// mTencentMap.setInfoWindowAdapter(mInfoWindowAdapter);
// showInfoWindow();
// break;
// case R.id.menu_add_infowindow_custom_2:
// mInfoWindowAdapterStyle = STYLE_FRAME;
// mTencentMap.setInfoWindowAdapter(mInfoWindowAdapter);
// showInfoWindow();
// break;
// case R.id.menu_play:
// animationPlay();
// break;
// case R.id.menu_delete:
// hideInfoWindow();
// break;
// }
//
// mTencentMap.enableMultipleInfowindow(mMultEnable);
// return super.onOptionsItemSelected(item);
// }
//
// private void initMarkers() {
// mMarker = createMarker();
// if (mMultEnable) {
// mAnotherMarker = createMultMarker();
// }
// }
//
// private void showInfoWindow() {
// if (mMarker != null) {
// mMarker.showInfoWindow();
// }
//
// if (mAnotherMarker != null && mMultEnable) {
// mAnotherMarker.showInfoWindow();
// }
// }
//
// private void hideInfoWindow() {
// if (mMarker != null) {
// mMarker.hideInfoWindow();
// }
//
// if (mAnotherMarker != null && mMultEnable) {
// mAnotherMarker.hideInfoWindow();
// }
// mTencentMap.setInfoWindowAdapter(null);
// }
//
// private void animationPlay() {
//
// if (mInfoWindowType == TYPE_VIEW) {
// //TODO :动画
// }
// }
}

View File

@ -1,54 +1,54 @@
package cc.winboll.studio.positions.demo.marker;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class MarkerOptionsActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
options.fastLoad(true); //设置是否快速加载
options.icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker))); //加载图标
options.tag(tencentMap.addCircle(new CircleOptions().center(new LatLng(39.984059, 116.305756)))); //设置标签对象
tencentMap.addMarker(options);
}
private LatLng latLng = new LatLng(39.984864, 116.305756);
private Bitmap getBitMap(int resourceId){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 100;
int newHeight = 100;
float widthScale = ((float)newWidth)/width;
float heightScale = ((float)newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
return bitmap;
}
private MarkerOptions options = new MarkerOptions(latLng). //坐标设置
anchor(0.5f, 0.5f). //标注的锚点
clockwise(true). //旋转角度顺时针
draggable(true). //标注可被拖动
flat(true). //设置3D标注
infoWindowEnable(true). //弹出infowindow
infoWindowAnchor(0.5f, 0.5f). //标注信息infowindow锚点
rotation(90f). //旋转角度
snippet("气泡infowindow内容"). //设置infowindow内容
title("标题内容"). //infowindow标题内容
visible(true). //标注是否可见
zIndex(0); //堆叠顺序越大优先级越高
}
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.graphics.Matrix;
//import android.os.Bundle;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
//
//public class MarkerOptionsActivity extends SupportMapFragmentActivity {
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// options.fastLoad(true); //设置是否快速加载
// options.icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker))); //加载图标
// options.tag(tencentMap.addCircle(new CircleOptions().center(new LatLng(39.984059, 116.305756)))); //设置标签对象
// tencentMap.addMarker(options);
// }
//
// private LatLng latLng = new LatLng(39.984864, 116.305756);
//
// private Bitmap getBitMap(int resourceId){
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 100;
// int newHeight = 100;
// float widthScale = ((float)newWidth)/width;
// float heightScale = ((float)newHeight)/height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
// return bitmap;
// }
//
//
// private MarkerOptions options = new MarkerOptions(latLng). //坐标设置
// anchor(0.5f, 0.5f). //标注的锚点
// clockwise(true). //旋转角度顺时针
// draggable(true). //标注可被拖动
// flat(true). //设置3D标注
// infoWindowEnable(true). //弹出infowindow
// infoWindowAnchor(0.5f, 0.5f). //标注信息infowindow锚点
// rotation(90f). //旋转角度
// snippet("气泡infowindow内容"). //设置infowindow内容
// title("标题内容"). //infowindow标题内容
// visible(true). //标注是否可见
// zIndex(0); //堆叠顺序越大优先级越高
//}

View File

@ -21,87 +21,87 @@ import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class SimpleMarkerActivity extends AbsMapActivity {
private TencentMap mTencentMap;
private Marker mSimpleMarker;
private Marker mCustomMarker;
private boolean mMarkerAdded;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap pTencentMap) {
super.onCreate(savedInstanceState, pTencentMap);
mTencentMap = pTencentMap;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.simple_marker, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_add).setVisible(!mMarkerAdded);
menu.findItem(R.id.menu_delete).setVisible(mMarkerAdded);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_add_marker_simple:
if (mSimpleMarker == null) {
LatLng position = new LatLng(40.011313,116.391907);
mSimpleMarker = mTencentMap.addMarker(new MarkerOptions(position));
mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(position));
mMarkerAdded = true;
}
break;
case R.id.menu_add_marker_custom:
if (mCustomMarker == null) {
LatLng position = new LatLng(40.011313,116.391907);
BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker);
mCustomMarker = mTencentMap.addMarker(new MarkerOptions(position)
.icon(custom)
.alpha(0.7f)
.flat(true)
.clockwise(false)
.rotation(30)
);
Animation animation = new AlphaAnimation(0.7f, 0f);
animation.setDuration(2000);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart() {
}
@Override
public void onAnimationEnd() {
mCustomMarker.setAlpha(1);
}
});
mCustomMarker.setAnimation(animation);
mCustomMarker.startAnimation();
mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(position));
mMarkerAdded = true;
}
break;
case R.id.menu_delete:
if (mSimpleMarker != null) {
mSimpleMarker.remove();
mSimpleMarker = null;
}
if (mCustomMarker != null) {
mCustomMarker.remove();
mCustomMarker = null;
}
mMarkerAdded = false;
break;
}
return super.onOptionsItemSelected(item);
}
// private TencentMap mTencentMap;
// private Marker mSimpleMarker;
// private Marker mCustomMarker;
//
// private boolean mMarkerAdded;
// @Override
// protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap pTencentMap) {
// super.onCreate(savedInstanceState, pTencentMap);
// mTencentMap = pTencentMap;
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.simple_marker, menu);
// return super.onCreateOptionsMenu(menu);
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_add).setVisible(!mMarkerAdded);
// menu.findItem(R.id.menu_delete).setVisible(mMarkerAdded);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_add_marker_simple:
// if (mSimpleMarker == null) {
// LatLng position = new LatLng(40.011313,116.391907);
// mSimpleMarker = mTencentMap.addMarker(new MarkerOptions(position));
// mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(position));
// mMarkerAdded = true;
// }
// break;
// case R.id.menu_add_marker_custom:
//
// if (mCustomMarker == null) {
// LatLng position = new LatLng(40.011313,116.391907);
// BitmapDescriptor custom = BitmapDescriptorFactory.fromResource(R.drawable.marker);
// mCustomMarker = mTencentMap.addMarker(new MarkerOptions(position)
// .icon(custom)
// .alpha(0.7f)
// .flat(true)
// .clockwise(false)
// .rotation(30)
// );
//
// Animation animation = new AlphaAnimation(0.7f, 0f);
// animation.setDuration(2000);
// animation.setAnimationListener(new AnimationListener() {
// @Override
// public void onAnimationStart() {
//
// }
//
// @Override
// public void onAnimationEnd() {
// mCustomMarker.setAlpha(1);
// }
// });
// mCustomMarker.setAnimation(animation);
// mCustomMarker.startAnimation();
// mTencentMap.moveCamera(CameraUpdateFactory.newLatLng(position));
// mMarkerAdded = true;
// }
// break;
// case R.id.menu_delete:
// if (mSimpleMarker != null) {
// mSimpleMarker.remove();
// mSimpleMarker = null;
// }
//
// if (mCustomMarker != null) {
// mCustomMarker.remove();
// mCustomMarker = null;
// }
//
// mMarkerAdded = false;
// break;
// }
// return super.onOptionsItemSelected(item);
// }
}

View File

@ -14,46 +14,51 @@ import com.tencent.tencentmap.mapsdk.maps.model.Marker;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class PoiClickActivity extends SupportMapFragmentActivity implements TencentMap.OnMapPoiClickListener {
private Switch poiSwitch;
private Marker marker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
poiSwitch = findViewById(R.id.switch_poi);
poiSwitch.setVisibility(View.VISIBLE);
poiSwitch.setText("Poi显示");
tencentMap.setOnMapPoiClickListener(this);
poiSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
tencentMap.setPoisEnabled(true);
}else{
tencentMap.setPoisEnabled(false);
if (marker != null)
marker.remove();
}
}
});
}
@Override
public void onClicked(MapPoi mapPoi) {
setMarker(mapPoi.getPosition(), mapPoi.getName());
}
/**
* 设置标注
*/
private void setMarker(LatLng latLng, String name){
if(marker != null)
marker.remove();
MarkerOptions options = new MarkerOptions().position(latLng);
//设置infowindow
options.title("地址:");
options.snippet(name);
marker = tencentMap.addMarker(options);
marker.showInfoWindow();
public void onClicked(MapPoi p1) {
}
// private Switch poiSwitch;
// private Marker marker;
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// poiSwitch = findViewById(R.id.switch_poi);
// poiSwitch.setVisibility(View.VISIBLE);
// poiSwitch.setText("Poi显示");
// tencentMap.setOnMapPoiClickListener(this);
// poiSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// if (b){
// tencentMap.setPoisEnabled(true);
// }else{
// tencentMap.setPoisEnabled(false);
// if (marker != null)
// marker.remove();
// }
// }
// });
// }
//
// @Override
// public void onClicked(MapPoi mapPoi) {
// setMarker(mapPoi.getPosition(), mapPoi.getName());
// }
//
// /**
// * 设置标注
// */
// private void setMarker(LatLng latLng, String name){
//
// if(marker != null)
// marker.remove();
// MarkerOptions options = new MarkerOptions().position(latLng);
// //设置infowindow
// options.title("地址:");
// options.snippet(name);
// marker = tencentMap.addMarker(options);
// marker.showInfoWindow();
// }
}

View File

@ -1,38 +1,38 @@
package cc.winboll.studio.positions.demo.polygon;
import android.os.Bundle;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.Polygon;
import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions;
public class DrawPolygonActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LatLng[] latLngs = {
new LatLng(39.984864, 116.305756),
new LatLng(39.983618, 116.305848),
new LatLng(39.982347, 116.305966),
new LatLng(39.982412, 116.308111),
new LatLng(39.984122, 116.308224),
new LatLng(39.984955, 116.308099),
new LatLng(39.984864, 116.305756)
};
Polygon polygon = tencentMap.addPolygon(new PolygonOptions().
add(latLngs).
fillColor(getResources().getColor(R.color.style)).
strokeColor(getResources().getColor(R.color.colorPrimary)).
strokeWidth(1));
tencentMap.setOnPolygonClickListener(new TencentMap.OnPolygonClickListener() {
@Override
public void onPolygonClick(Polygon polygon, LatLng latLng) {
}
});
}
}
//import android.os.Bundle;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.Polygon;
//import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions;
//
//public class DrawPolygonActivity extends SupportMapFragmentActivity {
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// LatLng[] latLngs = {
// new LatLng(39.984864, 116.305756),
// new LatLng(39.983618, 116.305848),
// new LatLng(39.982347, 116.305966),
// new LatLng(39.982412, 116.308111),
// new LatLng(39.984122, 116.308224),
// new LatLng(39.984955, 116.308099),
// new LatLng(39.984864, 116.305756)
// };
// Polygon polygon = tencentMap.addPolygon(new PolygonOptions().
// add(latLngs).
// fillColor(getResources().getColor(R.color.style)).
// strokeColor(getResources().getColor(R.color.colorPrimary)).
// strokeWidth(1));
// tencentMap.setOnPolygonClickListener(new TencentMap.OnPolygonClickListener() {
// @Override
// public void onPolygonClick(Polygon polygon, LatLng latLng) {
//
// }
// });
// }
//}

View File

@ -1,73 +1,73 @@
package cc.winboll.studio.positions.demo.polygon;
import android.os.Bundle;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
import com.tencent.tencentmap.mapsdk.maps.model.Polygon;
import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions;
import java.util.ArrayList;
import java.util.List;
public class PolylonOptionsActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Polygon polygon = tencentMap.addPolygon(polygonOptions);
polygon.setPoints(transferArrayToList(latLngs)); //Options中设置顶点
Polygon newPolygon = tencentMap.addPolygon(newPolygonOptions);
newPolygon.setOptions(newPolygonOptions); //重新设置Options
newPolygon.setClickable(true); //设置可点击
newPolygon.setFillColor(0xaa324354);
newPolygon.setPoints(transferArrayToList(newLatLngs)); //设置坐标
newPolygon.setTag(tencentMap.addMarker(new MarkerOptions().position(new LatLng(39.984866, 116.305759)).title("设置标注").draggable(true)));
}
private List<LatLng> transferArrayToList(LatLng[] latLngs){ //坐标数组与List转换
List<LatLng> list = new ArrayList<>();
if (latLngs == null)
return list;
for (int i = 0; i < latLngs.length; i++)
list.add(latLngs[i]);
return list;
}
private LatLng[] latLngs = {
new LatLng(39.984864, 116.305756),
new LatLng(39.983618, 116.305848),
new LatLng(39.982347, 116.305966),
new LatLng(39.982412, 116.308111),
new LatLng(39.984122, 116.308224),
new LatLng(39.984955, 116.308099),
new LatLng(39.984864, 116.305756)
};
private LatLng[] newLatLngs = {
new LatLng(39.984864, 116.305756),
new LatLng(39.983618, 116.305848),
new LatLng(39.982347, 116.305966),
new LatLng(39.982412, 116.308111),
new LatLng(39.984122, 116.308224),
new LatLng(39.984955, 116.308099),
new LatLng(39.984864, 116.305756)
};
private PolygonOptions polygonOptions = new PolygonOptions().
add(latLngs). // 添加图形坐标点
fillColor(0x56643313). //填充颜色
strokeColor(0xfa349012). //描边颜色
strokeWidth(1). //描边宽度
visible(true). //是否可见
zIndex(0). //堆叠顺序越大优先级越高
clickable(true); // 是否可点击
private PolygonOptions newPolygonOptions = new PolygonOptions().
addAll(transferArrayToList(newLatLngs)); //设置批量添加顶点
}
//import android.os.Bundle;
//
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
//import com.tencent.tencentmap.mapsdk.maps.model.Polygon;
//import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions;
//
//import java.util.ArrayList;
//import java.util.List;
//
//public class PolylonOptionsActivity extends SupportMapFragmentActivity {
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// Polygon polygon = tencentMap.addPolygon(polygonOptions);
// polygon.setPoints(transferArrayToList(latLngs)); //Options中设置顶点
// Polygon newPolygon = tencentMap.addPolygon(newPolygonOptions);
// newPolygon.setOptions(newPolygonOptions); //重新设置Options
// newPolygon.setClickable(true); //设置可点击
// newPolygon.setFillColor(0xaa324354);
// newPolygon.setPoints(transferArrayToList(newLatLngs)); //设置坐标
// newPolygon.setTag(tencentMap.addMarker(new MarkerOptions().position(new LatLng(39.984866, 116.305759)).title("设置标注").draggable(true)));
//
//
// }
//
// private List<LatLng> transferArrayToList(LatLng[] latLngs){ //坐标数组与List转换
// List<LatLng> list = new ArrayList<>();
// if (latLngs == null)
// return list;
// for (int i = 0; i < latLngs.length; i++)
// list.add(latLngs[i]);
//
// return list;
//
// }
// private LatLng[] latLngs = {
// new LatLng(39.984864, 116.305756),
// new LatLng(39.983618, 116.305848),
// new LatLng(39.982347, 116.305966),
// new LatLng(39.982412, 116.308111),
// new LatLng(39.984122, 116.308224),
// new LatLng(39.984955, 116.308099),
// new LatLng(39.984864, 116.305756)
// };
//
// private LatLng[] newLatLngs = {
// new LatLng(39.984864, 116.305756),
// new LatLng(39.983618, 116.305848),
// new LatLng(39.982347, 116.305966),
// new LatLng(39.982412, 116.308111),
// new LatLng(39.984122, 116.308224),
// new LatLng(39.984955, 116.308099),
// new LatLng(39.984864, 116.305756)
// };
//
//
// private PolygonOptions polygonOptions = new PolygonOptions().
// add(latLngs). // 添加图形坐标点
// fillColor(0x56643313). //填充颜色
// strokeColor(0xfa349012). //描边颜色
// strokeWidth(1). //描边宽度
// visible(true). //是否可见
// zIndex(0). //堆叠顺序越大优先级越高
// clickable(true); // 是否可点击
//
// private PolygonOptions newPolygonOptions = new PolygonOptions().
// addAll(transferArrayToList(newLatLngs)); //设置批量添加顶点
//}

View File

@ -1,178 +1,178 @@
package cc.winboll.studio.positions.demo.polygon;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
import com.tencent.tencentmap.mapsdk.maps.model.Tile;
import com.tencent.tencentmap.mapsdk.maps.model.TileOverlay;
import com.tencent.tencentmap.mapsdk.maps.model.TileOverlayOptions;
import com.tencent.tencentmap.mapsdk.maps.model.TileProvider;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class TileOverlayActivity extends AppCompatActivity {
private MapView mapView;
private TencentMap tencentMap;
private boolean mMarkerAdded;
private TileOverlay mTileOverlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tile_overlay);
initView();
}
private void initView() {
mapView = findViewById(R.id.mapView);
tencentMap = mapView.getMap();
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.917505, 116.397657),
15,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.markercol, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded);
menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_open_collisionsmap:
mMarkerAdded = true;
if (mTileOverlay == null) {
mTileOverlay = tencentMap.addTileOverlay(
new TileOverlayOptions().
tileProvider(new LocalTileProvider()));
}
break;
case R.id.menu_close_collisionsmap:
mMarkerAdded = false;
if (mTileOverlay != null) {
mTileOverlay.clearTileCache();
mTileOverlay.remove();
mTileOverlay = null;
}
break;
}
supportInvalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
class LocalTileProvider implements TileProvider {
@Override
public Tile getTile(int x, int y, int zoom) {
LatLng latLng = new LatLng(39.917505, 116.397657);
int iZ = 16;
double n = Math.pow(2, iZ);
int iX = (int) (((latLng.getLongitude() + 180) / 360) * n);
int iY = (int) ((1 - (Math.log(Math.tan(Math.toRadians(latLng.getLatitude())) +
(1 / Math.cos(Math.toRadians(latLng.getLatitude())))) / Math.PI)) / 2 * n);
if (iX == x && iY == y && iZ == zoom) {
Log.e("tile", "zoom:" + zoom + " x:" + x + " y:" + y);
return new Tile(256, 256, tileData());
}
return TileProvider.NO_TILE;
}
byte[] tileData() {
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
is = getApplicationContext().getAssets().open("gugong.jpg");
baos = new ByteArrayOutputStream();
byte[] byteBuffer = new byte[1024];
int count = 0;
while ((count = is.read(byteBuffer)) != -1) {
baos.write(byteBuffer, 0, count);
}
return baos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (baos != null) {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
}
package cc.winboll.studio.positions.demo.polygon;
//import androidx.annotation.NonNull;
//import androidx.appcompat.app.AppCompatActivity;
//
//import android.os.Bundle;
//import android.util.Log;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.view.View;
//
//import cc.winboll.studio.positions.R;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerCollisionItem;
//import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
//import com.tencent.tencentmap.mapsdk.maps.model.Tile;
//import com.tencent.tencentmap.mapsdk.maps.model.TileOverlay;
//import com.tencent.tencentmap.mapsdk.maps.model.TileOverlayOptions;
//import com.tencent.tencentmap.mapsdk.maps.model.TileProvider;
//
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//
//public class TileOverlayActivity extends AppCompatActivity {
// private MapView mapView;
// private TencentMap tencentMap;
// private boolean mMarkerAdded;
// private TileOverlay mTileOverlay;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_tile_overlay);
// initView();
// }
//
// private void initView() {
// mapView = findViewById(R.id.mapView);
// tencentMap = mapView.getMap();
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.917505, 116.397657),
// 15,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.markercol, menu);
// return super.onCreateOptionsMenu(menu);
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_open_collisionsmap).setVisible(!mMarkerAdded);
// menu.findItem(R.id.menu_close_collisionsmap).setVisible(mMarkerAdded);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_open_collisionsmap:
// mMarkerAdded = true;
// if (mTileOverlay == null) {
// mTileOverlay = tencentMap.addTileOverlay(
// new TileOverlayOptions().
// tileProvider(new LocalTileProvider()));
// }
//
// break;
// case R.id.menu_close_collisionsmap:
// mMarkerAdded = false;
// if (mTileOverlay != null) {
// mTileOverlay.clearTileCache();
// mTileOverlay.remove();
// mTileOverlay = null;
// }
// break;
// }
//
// supportInvalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// class LocalTileProvider implements TileProvider {
//
// @Override
// public Tile getTile(int x, int y, int zoom) {
// LatLng latLng = new LatLng(39.917505, 116.397657);
// int iZ = 16;
// double n = Math.pow(2, iZ);
// int iX = (int) (((latLng.getLongitude() + 180) / 360) * n);
// int iY = (int) ((1 - (Math.log(Math.tan(Math.toRadians(latLng.getLatitude())) +
// (1 / Math.cos(Math.toRadians(latLng.getLatitude())))) / Math.PI)) / 2 * n);
// if (iX == x && iY == y && iZ == zoom) {
// Log.e("tile", "zoom:" + zoom + " x:" + x + " y:" + y);
// return new Tile(256, 256, tileData());
// }
// return TileProvider.NO_TILE;
// }
//
// byte[] tileData() {
// InputStream is = null;
// ByteArrayOutputStream baos = null;
// try {
// is = getApplicationContext().getAssets().open("gugong.jpg");
// baos = new ByteArrayOutputStream();
// byte[] byteBuffer = new byte[1024];
// int count = 0;
// while ((count = is.read(byteBuffer)) != -1) {
// baos.write(byteBuffer, 0, count);
// }
// return baos.toByteArray();
// } catch (IOException e) {
// e.printStackTrace();
// return null;
// } finally {
// if (is != null) {
// try {
// is.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// if (baos != null) {
// try {
// baos.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// }
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mapView.onPause();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mapView.onDestroy();
// }
//
//
// @Override
// protected void onStart() {
// super.onStart();
// mapView.onStart();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mapView.onStop();
// }
//}

View File

@ -1,194 +1,194 @@
package cc.winboll.studio.positions.demo.polyline;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.Nullable;
import cc.winboll.studio.positions.demo.AbsMapActivity;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.util.ArrayList;
import java.util.List;
public class DrawLineActivity extends AbsMapActivity {
private int typeSimple = 0;
private int typeImage = 1;
private int typeColor = 2;
private int typeArrow = 3;
private int typeGradient = 4;
private TencentMap mTencentMap;
private boolean mHasAdded;
private boolean mHasEnableText;
private Polyline polyline;
private PolylineOptions.Text mPolylineText;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap tencentMap) {
super.onCreate(savedInstanceState, tencentMap);
mTencentMap = tencentMap;
tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.polyline, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_add).setVisible(!mHasAdded);
menu.findItem(R.id.menu_text).setTitle(mHasEnableText ? "关闭路名" : "开启路名").setVisible(mHasAdded);
menu.findItem(R.id.menu_delete).setVisible(mHasAdded);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_add_line_simple:
mTencentMap.clear();
polyline = mTencentMap.addPolyline(setLineStyle(typeSimple));
mHasAdded = true;
break;
case R.id.menu_add_line_dash:
mTencentMap.clear();
polyline = mTencentMap.addPolyline(setLineStyle(typeImage));
mHasAdded = true;
break;
case R.id.menu_add_line_segment:
mTencentMap.clear();
polyline = mTencentMap.addPolyline(setLineStyle(typeColor));
int[] color = {0, 1, 2, 3, 4};
int[] index = {0, 1, 2, 3, 4, 5};
polyline.setColors(color, index);
mHasAdded = true;
break;
case R.id.menu_add_line_texture:
mTencentMap.clear();
polyline = mTencentMap.addPolyline(setLineStyle((typeArrow)));
mHasAdded = true;
break;
case R.id.menu_add_line_gradient:
mTencentMap.clear();
polyline = mTencentMap.addPolyline(setLineStyle((typeGradient)));
int[] indexes = {0, 1, 2, 3, 4};
// 设置每段索引之间的颜色这个颜色同样支持纹理颜色 PolylineOptions.Colors 中定义的 [0, 10]
int[] colors = {
0xff00ff00, // 线上点 [0, 1] 之间为绿色
0xffffff00, // 线上点 [1, 2] 之间为黄色
0xffff0000, // 线上点 [2, 3] 之间为红色
0xff131313, // 线上点 [3, 4] 之间为黄色
0xff1033f6 // 线上点 [4, 最后一个点] 之间为绿色
};
polyline.setColors(colors, indexes);
mHasAdded = true;
break;
case R.id.menu_text:
mHasEnableText = !mHasEnableText;
if (mHasEnableText) {
if (mPolylineText == null) {
mPolylineText = generateText();
//设置显示优先级可选项有HIGH或NORMAL
mPolylineText.setPriority(PolylineOptions.TextPriority.HIGH);
//设置字体大小
mPolylineText.setTextSize(10);
//设置填充颜色
mPolylineText.setStrokeColor(Color.WHITE);
//设置文字颜色
mPolylineText.setTextColor(Color.BLACK);
}
polyline.setText(mPolylineText);
} else {
polyline.setText(null);
}
break;
case R.id.menu_delete:
if (polyline != null) {
polyline.remove();
polyline = null;
mHasAdded = false;
mHasEnableText = false;
}
break;
}
return super.onOptionsItemSelected(item);
}
private PolylineOptions setLineStyle(int type) {
PolylineOptions polylineOptions = new PolylineOptions().addAll(getLatlons()).lineCap(true);
switch (type) {
case 0:
//设置折线颜色宽度
polylineOptions
.color(0xff00ff00)
.width(5f);
break;
case 1:
List<Integer> list = new ArrayList<>();
list.add(35);
list.add(20);
polylineOptions
.lineType(PolylineOptions.LineType.LINE_TYPE_IMAGEINARYLINE)
.width(10)
.pattern(list);
break;
case 2:
//线路颜色值纹理图片里的颜色索引
polylineOptions
.colorType(PolylineOptions.ColorType.LINE_COLOR_TEXTURE)
.color(PolylineOptions.Colors.GREEN)
.colorTexture(BitmapDescriptorFactory.fromAsset("color_texture.png"));
break;
case 3:
polylineOptions
.arrow(true)
.arrowSpacing(30)
.arrowTexture(BitmapDescriptorFactory.fromAsset("color_arrow_texture.png"));
break;
case 4:
polylineOptions
.gradient(true)
.lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE)
.width(20);
break;
}
return polylineOptions;
}
private PolylineOptions.Text generateText() {
List<PolylineOptions.SegmentText> segmentTexts = new ArrayList<>();
//参数分别表示坐标路径数组起点index终点index动态路名文字
segmentTexts.add(new PolylineOptions.SegmentText(0, 1, "苏州街"));
segmentTexts.add(new PolylineOptions.SegmentText(1, 2, "北四环西路辅路"));
segmentTexts.add(new PolylineOptions.SegmentText(2, 4, "彩和坊路"));
return new PolylineOptions.Text.Builder(segmentTexts).build();
}
private List<LatLng> getLatlons() {
List<LatLng> latLngs = new ArrayList<LatLng>();
latLngs.add(new LatLng(39.984864, 116.305756));
latLngs.add(new LatLng(39.983618, 116.305848));
latLngs.add(new LatLng(39.982347, 116.305966));
latLngs.add(new LatLng(39.982412, 116.308111));
latLngs.add(new LatLng(39.984122, 116.308224));
latLngs.add(new LatLng(39.984955, 116.308099));
return latLngs;
}
}
//import android.graphics.Color;
//import android.os.Bundle;
//import android.view.Menu;
//import android.view.MenuItem;
//
//import androidx.annotation.Nullable;
//
//import cc.winboll.studio.positions.demo.AbsMapActivity;
//import cc.winboll.studio.positions.R;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
//import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
//
//import java.util.ArrayList;
//import java.util.List;
//
//public class DrawLineActivity extends AbsMapActivity {
// private int typeSimple = 0;
// private int typeImage = 1;
// private int typeColor = 2;
// private int typeArrow = 3;
// private int typeGradient = 4;
//
// private TencentMap mTencentMap;
// private boolean mHasAdded;
// private boolean mHasEnableText;
// private Polyline polyline;
// private PolylineOptions.Text mPolylineText;
//
// @Override
// protected void onCreate(@Nullable Bundle savedInstanceState, TencentMap tencentMap) {
// super.onCreate(savedInstanceState, tencentMap);
// mTencentMap = tencentMap;
// tencentMap.moveCamera(CameraUpdateFactory.zoomTo(15));
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.polyline, menu);
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_add).setVisible(!mHasAdded);
// menu.findItem(R.id.menu_text).setTitle(mHasEnableText ? "关闭路名" : "开启路名").setVisible(mHasAdded);
// menu.findItem(R.id.menu_delete).setVisible(mHasAdded);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// switch (item.getItemId()) {
// case R.id.menu_add_line_simple:
// mTencentMap.clear();
// polyline = mTencentMap.addPolyline(setLineStyle(typeSimple));
// mHasAdded = true;
// break;
//
// case R.id.menu_add_line_dash:
// mTencentMap.clear();
// polyline = mTencentMap.addPolyline(setLineStyle(typeImage));
// mHasAdded = true;
// break;
// case R.id.menu_add_line_segment:
// mTencentMap.clear();
// polyline = mTencentMap.addPolyline(setLineStyle(typeColor));
// int[] color = {0, 1, 2, 3, 4};
// int[] index = {0, 1, 2, 3, 4, 5};
// polyline.setColors(color, index);
// mHasAdded = true;
// break;
// case R.id.menu_add_line_texture:
// mTencentMap.clear();
// polyline = mTencentMap.addPolyline(setLineStyle((typeArrow)));
// mHasAdded = true;
// break;
// case R.id.menu_add_line_gradient:
// mTencentMap.clear();
// polyline = mTencentMap.addPolyline(setLineStyle((typeGradient)));
// int[] indexes = {0, 1, 2, 3, 4};
//// 设置每段索引之间的颜色这个颜色同样支持纹理颜色 PolylineOptions.Colors 中定义的 [0, 10]
// int[] colors = {
// 0xff00ff00, // 线上点 [0, 1] 之间为绿色
// 0xffffff00, // 线上点 [1, 2] 之间为黄色
// 0xffff0000, // 线上点 [2, 3] 之间为红色
// 0xff131313, // 线上点 [3, 4] 之间为黄色
// 0xff1033f6 // 线上点 [4, 最后一个点] 之间为绿色
// };
// polyline.setColors(colors, indexes);
// mHasAdded = true;
// break;
// case R.id.menu_text:
// mHasEnableText = !mHasEnableText;
// if (mHasEnableText) {
// if (mPolylineText == null) {
// mPolylineText = generateText();
// //设置显示优先级可选项有HIGH或NORMAL
// mPolylineText.setPriority(PolylineOptions.TextPriority.HIGH);
// //设置字体大小
// mPolylineText.setTextSize(10);
// //设置填充颜色
// mPolylineText.setStrokeColor(Color.WHITE);
// //设置文字颜色
// mPolylineText.setTextColor(Color.BLACK);
// }
//
// polyline.setText(mPolylineText);
// } else {
// polyline.setText(null);
// }
//
// break;
//
// case R.id.menu_delete:
// if (polyline != null) {
// polyline.remove();
// polyline = null;
// mHasAdded = false;
// mHasEnableText = false;
//
// }
// break;
// }
// return super.onOptionsItemSelected(item);
// }
//
// private PolylineOptions setLineStyle(int type) {
// PolylineOptions polylineOptions = new PolylineOptions().addAll(getLatlons()).lineCap(true);
// switch (type) {
// case 0:
// //设置折线颜色宽度
// polylineOptions
// .color(0xff00ff00)
// .width(5f);
// break;
// case 1:
// List<Integer> list = new ArrayList<>();
// list.add(35);
// list.add(20);
// polylineOptions
// .lineType(PolylineOptions.LineType.LINE_TYPE_IMAGEINARYLINE)
// .width(10)
// .pattern(list);
// break;
// case 2:
// //线路颜色值纹理图片里的颜色索引
// polylineOptions
// .colorType(PolylineOptions.ColorType.LINE_COLOR_TEXTURE)
// .color(PolylineOptions.Colors.GREEN)
// .colorTexture(BitmapDescriptorFactory.fromAsset("color_texture.png"));
// break;
// case 3:
// polylineOptions
// .arrow(true)
// .arrowSpacing(30)
// .arrowTexture(BitmapDescriptorFactory.fromAsset("color_arrow_texture.png"));
// break;
// case 4:
// polylineOptions
// .gradient(true)
// .lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE)
// .width(20);
// break;
//
// }
// return polylineOptions;
// }
//
// private PolylineOptions.Text generateText() {
// List<PolylineOptions.SegmentText> segmentTexts = new ArrayList<>();
// //参数分别表示坐标路径数组起点index终点index动态路名文字
// segmentTexts.add(new PolylineOptions.SegmentText(0, 1, "苏州街"));
// segmentTexts.add(new PolylineOptions.SegmentText(1, 2, "北四环西路辅路"));
// segmentTexts.add(new PolylineOptions.SegmentText(2, 4, "彩和坊路"));
// return new PolylineOptions.Text.Builder(segmentTexts).build();
// }
//
// private List<LatLng> getLatlons() {
// List<LatLng> latLngs = new ArrayList<LatLng>();
// latLngs.add(new LatLng(39.984864, 116.305756));
// latLngs.add(new LatLng(39.983618, 116.305848));
// latLngs.add(new LatLng(39.982347, 116.305966));
// latLngs.add(new LatLng(39.982412, 116.308111));
// latLngs.add(new LatLng(39.984122, 116.308224));
// latLngs.add(new LatLng(39.984955, 116.308099));
// return latLngs;
// }
//}

View File

@ -17,116 +17,116 @@ import java.util.ArrayList;
import java.util.List;
public class LineTextActivity extends SupportMapFragmentActivity {
private Polyline polyline;
private static List<LatLng> mPoints = new ArrayList<>();
private Switch switch_style;
private Switch switch_off;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
tencentMap.moveCamera(CameraUpdateFactory.zoomTo(16));
switch_style.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
if (polyline == null) {
return;
}
PolylineOptions.Text text = polyline.getText();
removeText();
if (checked) {
//设置显示优先级可选项有HIGH或NORMAL
text.setPriority(PolylineOptions.TextPriority.HIGH);
//设置字体大小
text.setTextSize(10);
//设置填充颜色
text.setStrokeColor(Color.WHITE);
//设置文字颜色
text.setTextColor(Color.BLACK);
} else {
//设置显示优先级可选项有HIGH或NORMAL
text.setPriority(PolylineOptions.TextPriority.NORMAL);
//设置字体大小
text.setTextSize(8);
//设置填充颜色
text.setStrokeColor(Color.WHITE);
//设置文字颜色
text.setTextColor(Color.GRAY);
}
polyline.setText(text);
}
});
switch_off.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
if (checked) {
polyline = createLineWithText();
} else {
removeText();
polyline.remove();
polyline = null;
}
}
});
}
private void initView() {
//文字
switch_style = (Switch) findViewById(R.id.switch_style);
switch_style.setVisibility(View.VISIBLE);
switch_off = (Switch) findViewById(R.id.switch_off);
switch_off.setVisibility(View.VISIBLE);
}
public Polyline addLine() {
Polyline polyline = tencentMap.addPolyline(new PolylineOptions().addAll(mPoints).color(0x22ff0000));
return polyline;
}
//生成坐标点路径
private List<LatLng> generateLatLngs() {
if (mPoints.size() != 0)
mPoints = new ArrayList<>();
//苏州街
mPoints.add(new LatLng(39.982382, 116.305883));
//北四环西路辅路
mPoints.add(new LatLng(39.984914, 116.305690));
//彩和坊路
mPoints.add(new LatLng(39.985045, 116.308136));
mPoints.add(new LatLng(39.983570, 116.308088));
mPoints.add(new LatLng(39.980063, 116.308297));
return mPoints;
}
private PolylineOptions.Text generateText() {
List<PolylineOptions.SegmentText> segmentTexts = new ArrayList<>();
//参数分别表示坐标路径数组起点index终点index动态路名文字
segmentTexts.add(new PolylineOptions.SegmentText(0, 1, "苏州街"));
segmentTexts.add(new PolylineOptions.SegmentText(1, 2, "北四环西路辅路"));
segmentTexts.add(new PolylineOptions.SegmentText(2, 4, "彩和坊路"));
return new PolylineOptions.Text.Builder(segmentTexts).build();
}
private Polyline createLineWithText() {
Polyline polyline = tencentMap.addPolyline(new PolylineOptions().addAll(generateLatLngs()).text(generateText()));
PolylineOptions.Text text = polyline.getText();
return polyline;
}
private void removeText() {
polyline.setText(null);
}
// private Polyline polyline;
// private static List<LatLng> mPoints = new ArrayList<>();
// private Switch switch_style;
// private Switch switch_off;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// initView();
// tencentMap.moveCamera(CameraUpdateFactory.zoomTo(16));
// switch_style.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
// if (polyline == null) {
// return;
// }
//
// PolylineOptions.Text text = polyline.getText();
// removeText();
// if (checked) {
// //设置显示优先级可选项有HIGH或NORMAL
// text.setPriority(PolylineOptions.TextPriority.HIGH);
// //设置字体大小
// text.setTextSize(10);
// //设置填充颜色
// text.setStrokeColor(Color.WHITE);
// //设置文字颜色
// text.setTextColor(Color.BLACK);
// } else {
// //设置显示优先级可选项有HIGH或NORMAL
// text.setPriority(PolylineOptions.TextPriority.NORMAL);
// //设置字体大小
// text.setTextSize(8);
// //设置填充颜色
// text.setStrokeColor(Color.WHITE);
// //设置文字颜色
// text.setTextColor(Color.GRAY);
//
// }
//
// polyline.setText(text);
// }
// });
//
// switch_off.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// @Override
// public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
// if (checked) {
// polyline = createLineWithText();
// } else {
// removeText();
// polyline.remove();
// polyline = null;
// }
// }
// });
// }
//
//
// private void initView() {
// //文字
// switch_style = (Switch) findViewById(R.id.switch_style);
// switch_style.setVisibility(View.VISIBLE);
// switch_off = (Switch) findViewById(R.id.switch_off);
// switch_off.setVisibility(View.VISIBLE);
// }
//
// public Polyline addLine() {
// Polyline polyline = tencentMap.addPolyline(new PolylineOptions().addAll(mPoints).color(0x22ff0000));
//
// return polyline;
// }
//
//
// //生成坐标点路径
// private List<LatLng> generateLatLngs() {
// if (mPoints.size() != 0)
// mPoints = new ArrayList<>();
// //苏州街
// mPoints.add(new LatLng(39.982382, 116.305883));
// //北四环西路辅路
// mPoints.add(new LatLng(39.984914, 116.305690));
// //彩和坊路
// mPoints.add(new LatLng(39.985045, 116.308136));
// mPoints.add(new LatLng(39.983570, 116.308088));
// mPoints.add(new LatLng(39.980063, 116.308297));
// return mPoints;
// }
//
// private PolylineOptions.Text generateText() {
// List<PolylineOptions.SegmentText> segmentTexts = new ArrayList<>();
// //参数分别表示坐标路径数组起点index终点index动态路名文字
// segmentTexts.add(new PolylineOptions.SegmentText(0, 1, "苏州街"));
// segmentTexts.add(new PolylineOptions.SegmentText(1, 2, "北四环西路辅路"));
// segmentTexts.add(new PolylineOptions.SegmentText(2, 4, "彩和坊路"));
//
// return new PolylineOptions.Text.Builder(segmentTexts).build();
// }
//
//
// private Polyline createLineWithText() {
// Polyline polyline = tencentMap.addPolyline(new PolylineOptions().addAll(generateLatLngs()).text(generateText()));
// PolylineOptions.Text text = polyline.getText();
// return polyline;
// }
//
//
// private void removeText() {
// polyline.setText(null);
// }
//
}

View File

@ -23,269 +23,269 @@ import androidx.annotation.NonNull;
* @since 2020/6/11
*/
public class MutablePolylineActivity extends SupportMapFragmentActivity {
private boolean mIsAdd;
private Polyline mPolyline;
private final static Object[][] sData = {
{"更新1"},
{"更新2"},
{"重置"},
{"删除"},
};
private List<LatLng> mAppendPoints = new ArrayList<>();
private int mAppendIndex;
private Handler sHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if (msg.what == 1 && mPolyline != null && mAppendIndex < mAppendPoints.size()) {
mPolyline.appendPoint(mAppendPoints.get(mAppendIndex));
mAppendIndex++;
sendEmptyMessageDelayed(1, 300);
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_polyline_items, menu);
MenuItem actionMenu = menu.findItem(R.id.menu_actions);
SubMenu actionSubMenu = actionMenu.getSubMenu();
for (int i = 0; i < sData.length; i++) {
Object[] indoor = sData[i];
actionSubMenu.add(0, i, 0, String.valueOf(indoor[0]));
}
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_actions).setVisible(mIsAdd);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int itemId = item.getItemId();
if (mPolyline != null && itemId >= 0 && itemId < sData.length) {
if (itemId == 3) {
mPolyline.remove();
mIsAdd = false;
mAppendIndex = 0;
invalidateOptionsMenu();
} else if (itemId == 2) {
mPolyline.setPoints(getPoints(itemId));
} else {
mPolyline.appendPoints(getPoints(itemId));
}
return true;
}
List<Integer> pattern = new ArrayList<>();
pattern.add(35);
pattern.add(20);
PolylineOptions options = new PolylineOptions()
.addAll(getCreatePoints())
.width(15);
switch (item.getItemId()) {
case R.id.menu_add:
if (mIsAdd) {
break;
}
mIsAdd = true;
mPolyline = tencentMap.addPolyline(options);
break;
case R.id.menu_add_anim:
if (mIsAdd) {
break;
}
mIsAdd = true;
mPolyline = tencentMap.addPolyline(options);
sHandler.sendEmptyMessage(1);
break;
}
invalidateOptionsMenu();
return super.onOptionsItemSelected(item);
}
private static List<LatLng> getCreatePoints() {
List<LatLng> listPoints = new ArrayList<>();
addLine(listPoints);
return listPoints;
}
private static List<LatLng> getPoints(int itemId) {
List<LatLng> listPoints = new ArrayList<LatLng>();
if (itemId == 0) {
addLine1(listPoints);
} else if (itemId == 1) {
addLine2(listPoints);
} else if (itemId == 2) {
addLine(listPoints);
}
return listPoints;
}
private static void addLine(List<LatLng> listPoints) {
listPoints.add(new LatLng(39.981787, 116.306649));
listPoints.add(new LatLng(39.982021, 116.306739));
listPoints.add(new LatLng(39.982351, 116.306883));
listPoints.add(new LatLng(39.98233, 116.306047));
listPoints.add(new LatLng(39.982324, 116.305867));
listPoints.add(new LatLng(39.981918, 116.305885));
listPoints.add(new LatLng(39.981298, 116.305921));
listPoints.add(new LatLng(39.981091, 116.305939));
listPoints.add(new LatLng(39.980506, 116.305975));
listPoints.add(new LatLng(39.980148, 116.306002));
listPoints.add(new LatLng(39.980121, 116.306002));
listPoints.add(new LatLng(39.979708, 116.306038));
listPoints.add(new LatLng(39.979205, 116.306074));
listPoints.add(new LatLng(39.979205, 116.306074));
listPoints.add(new LatLng(39.978813, 116.306101));
listPoints.add(new LatLng(39.978015, 116.306182));
listPoints.add(new LatLng(39.977299, 116.306227));
listPoints.add(new LatLng(39.976996, 116.306245));
listPoints.add(new LatLng(39.976913, 116.306245));
listPoints.add(new LatLng(39.97597, 116.306308));
listPoints.add(new LatLng(39.97575, 116.306326));
listPoints.add(new LatLng(39.97564, 116.306335));
listPoints.add(new LatLng(39.975178, 116.306371));
listPoints.add(new LatLng(39.975185, 116.306514));
listPoints.add(new LatLng(39.97564, 116.306272));
listPoints.add(new LatLng(39.975633, 116.306272));
listPoints.add(new LatLng(39.975715, 116.307997));
listPoints.add(new LatLng(39.975819, 116.311545));
listPoints.add(new LatLng(39.975936, 116.314878));
listPoints.add(new LatLng(39.975998, 116.317528));
listPoints.add(new LatLng(39.976025, 116.318785));
listPoints.add(new LatLng(39.976108, 116.321714));
listPoints.add(new LatLng(39.976259, 116.326843));
listPoints.add(new LatLng(39.976328, 116.328622));
listPoints.add(new LatLng(39.976397, 116.330356));
listPoints.add(new LatLng(39.9765, 116.333967));
listPoints.add(new LatLng(39.976459, 116.341019));
listPoints.add(new LatLng(39.976473, 116.341674));
listPoints.add(new LatLng(39.976473, 116.341944));
listPoints.add(new LatLng(39.976473, 116.342546));
listPoints.add(new LatLng(39.976479, 116.345295));
listPoints.add(new LatLng(39.976197, 116.353829));
listPoints.add(new LatLng(39.976459, 116.369926));
listPoints.add(new LatLng(39.97672, 116.381353));
}
private static void addLine2(List<LatLng> listPoints) {
listPoints.add(new LatLng(39.91254, 116.41786));
listPoints.add(new LatLng(39.911258, 116.417905));
listPoints.add(new LatLng(39.910459, 116.417923));
listPoints.add(new LatLng(39.908557, 116.418049));
listPoints.add(new LatLng(39.908337, 116.418058));
listPoints.add(new LatLng(39.90824, 116.418067));
listPoints.add(new LatLng(39.90669, 116.418148));
listPoints.add(new LatLng(39.904795, 116.418283));
listPoints.add(new LatLng(39.903416, 116.418265));
listPoints.add(new LatLng(39.901218, 116.418408));
listPoints.add(new LatLng(39.900805, 116.418417));
listPoints.add(new LatLng(39.900805, 116.418426));
listPoints.add(new LatLng(39.901335, 116.417968));
listPoints.add(new LatLng(39.901342, 116.417968));
listPoints.add(new LatLng(39.901342, 116.418004));
listPoints.add(new LatLng(39.901197, 116.418193));
listPoints.add(new LatLng(39.901204, 116.418426));
listPoints.add(new LatLng(39.901218, 116.418552));
listPoints.add(new LatLng(39.901087, 116.418624));
listPoints.add(new LatLng(39.901053, 116.41884));
listPoints.add(new LatLng(39.901004, 116.419028));
listPoints.add(new LatLng(39.900922, 116.419388));
listPoints.add(new LatLng(39.900839, 116.419774));
listPoints.add(new LatLng(39.900749, 116.420043));
listPoints.add(new LatLng(39.900722, 116.420178));
listPoints.add(new LatLng(39.900667, 116.42034));
listPoints.add(new LatLng(39.900619, 116.420519));
listPoints.add(new LatLng(39.900557, 116.420744));
listPoints.add(new LatLng(39.900515, 116.420915));
listPoints.add(new LatLng(39.900488, 116.421067));
listPoints.add(new LatLng(39.900467, 116.421274));
listPoints.add(new LatLng(39.900467, 116.421301));
listPoints.add(new LatLng(39.900467, 116.421301));
listPoints.add(new LatLng(39.900674, 116.428856));
listPoints.add(new LatLng(39.900681, 116.429287));
listPoints.add(new LatLng(39.900674, 116.429287));
listPoints.add(new LatLng(39.900694, 116.429745));
listPoints.add(new LatLng(39.900736, 116.43173));
listPoints.add(new LatLng(39.900729, 116.433132));
listPoints.add(new LatLng(39.900729, 116.433267));
listPoints.add(new LatLng(39.900743, 116.433545));
}
private static void addLine1(List<LatLng> listPoints) {
listPoints.add(new LatLng(39.976748, 116.382314));
listPoints.add(new LatLng(39.976851, 116.388045));
listPoints.add(new LatLng(39.976892, 116.393597));
listPoints.add(new LatLng(39.976906, 116.394199));
listPoints.add(new LatLng(39.976906, 116.394298));
listPoints.add(new LatLng(39.976996, 116.405949));
listPoints.add(new LatLng(39.977016, 116.407692));
listPoints.add(new LatLng(39.97701, 116.417564));
listPoints.add(new LatLng(39.97701, 116.417564));
listPoints.add(new LatLng(39.977127, 116.417591));
listPoints.add(new LatLng(39.977127, 116.417582));
listPoints.add(new LatLng(39.969017, 116.417932));
listPoints.add(new LatLng(39.968549, 116.417977));
listPoints.add(new LatLng(39.9666, 116.418094));
listPoints.add(new LatLng(39.965099, 116.418193));
listPoints.add(new LatLng(39.963957, 116.418256));
listPoints.add(new LatLng(39.961533, 116.418301));
listPoints.add(new LatLng(39.959343, 116.418301));
listPoints.add(new LatLng(39.95422, 116.418732));
listPoints.add(new LatLng(39.952375, 116.418858));
listPoints.add(new LatLng(39.952106, 116.418876));
listPoints.add(new LatLng(39.95192, 116.418849));
listPoints.add(new LatLng(39.951693, 116.418696));
listPoints.add(new LatLng(39.951528, 116.418525));
listPoints.add(new LatLng(39.951383, 116.41822));
listPoints.add(new LatLng(39.95128, 116.417941));
listPoints.add(new LatLng(39.951239, 116.417609));
listPoints.add(new LatLng(39.951218, 116.417312));
listPoints.add(new LatLng(39.951218, 116.417088));
listPoints.add(new LatLng(39.951197, 116.416899));
listPoints.add(new LatLng(39.951115, 116.416675));
listPoints.add(new LatLng(39.950984, 116.416513));
listPoints.add(new LatLng(39.950839, 116.416378));
listPoints.add(new LatLng(39.950639, 116.41627));
listPoints.add(new LatLng(39.950426, 116.416217));
listPoints.add(new LatLng(39.950095, 116.416243));
listPoints.add(new LatLng(39.948835, 116.416486));
listPoints.add(new LatLng(39.948697, 116.416486));
listPoints.add(new LatLng(39.945557, 116.416648));
listPoints.add(new LatLng(39.941686, 116.416791));
listPoints.add(new LatLng(39.941005, 116.4168));
listPoints.add(new LatLng(39.938442, 116.416944));
listPoints.add(new LatLng(39.936045, 116.417016));
listPoints.add(new LatLng(39.933662, 116.417142));
listPoints.add(new LatLng(39.929247, 116.417295));
listPoints.add(new LatLng(39.927683, 116.417393));
listPoints.add(new LatLng(39.926553, 116.417438));
listPoints.add(new LatLng(39.924583, 116.417492));
listPoints.add(new LatLng(39.924369, 116.417492));
listPoints.add(new LatLng(39.921779, 116.417573));
listPoints.add(new LatLng(39.919044, 116.417654));
listPoints.add(new LatLng(39.917404, 116.417708));
listPoints.add(new LatLng(39.917287, 116.417717));
listPoints.add(new LatLng(39.916233, 116.417825));
listPoints.add(new LatLng(39.913904, 116.417807));
}
// private boolean mIsAdd;
// private Polyline mPolyline;
//
// private final static Object[][] sData = {
// {"更新1"},
// {"更新2"},
// {"重置"},
// {"删除"},
// };
//
// private List<LatLng> mAppendPoints = new ArrayList<>();
// private int mAppendIndex;
//
// private Handler sHandler = new Handler(Looper.getMainLooper()) {
// @Override
// public void handleMessage(@NonNull Message msg) {
// super.handleMessage(msg);
//
// if (msg.what == 1 && mPolyline != null && mAppendIndex < mAppendPoints.size()) {
// mPolyline.appendPoint(mAppendPoints.get(mAppendIndex));
// mAppendIndex++;
//
// sendEmptyMessageDelayed(1, 300);
// }
// }
// };
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.menu_polyline_items, menu);
//
// MenuItem actionMenu = menu.findItem(R.id.menu_actions);
// SubMenu actionSubMenu = actionMenu.getSubMenu();
//
// for (int i = 0; i < sData.length; i++) {
// Object[] indoor = sData[i];
// actionSubMenu.add(0, i, 0, String.valueOf(indoor[0]));
// }
// return true;
// }
//
// @Override
// public boolean onPrepareOptionsMenu(Menu menu) {
// menu.findItem(R.id.menu_actions).setVisible(mIsAdd);
// return super.onPrepareOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(@NonNull MenuItem item) {
//
// int itemId = item.getItemId();
//
// if (mPolyline != null && itemId >= 0 && itemId < sData.length) {
// if (itemId == 3) {
// mPolyline.remove();
// mIsAdd = false;
// mAppendIndex = 0;
// invalidateOptionsMenu();
// } else if (itemId == 2) {
// mPolyline.setPoints(getPoints(itemId));
// } else {
// mPolyline.appendPoints(getPoints(itemId));
// }
// return true;
// }
//
// List<Integer> pattern = new ArrayList<>();
// pattern.add(35);
// pattern.add(20);
//
// PolylineOptions options = new PolylineOptions()
// .addAll(getCreatePoints())
// .width(15);
//
// switch (item.getItemId()) {
// case R.id.menu_add:
// if (mIsAdd) {
// break;
// }
// mIsAdd = true;
// mPolyline = tencentMap.addPolyline(options);
// break;
// case R.id.menu_add_anim:
// if (mIsAdd) {
// break;
// }
// mIsAdd = true;
//
// mPolyline = tencentMap.addPolyline(options);
//
// sHandler.sendEmptyMessage(1);
// break;
//
// }
// invalidateOptionsMenu();
// return super.onOptionsItemSelected(item);
// }
//
// private static List<LatLng> getCreatePoints() {
// List<LatLng> listPoints = new ArrayList<>();
// addLine(listPoints);
// return listPoints;
// }
//
// private static List<LatLng> getPoints(int itemId) {
// List<LatLng> listPoints = new ArrayList<LatLng>();
// if (itemId == 0) {
// addLine1(listPoints);
// } else if (itemId == 1) {
// addLine2(listPoints);
// } else if (itemId == 2) {
// addLine(listPoints);
// }
//
// return listPoints;
// }
//
// private static void addLine(List<LatLng> listPoints) {
// listPoints.add(new LatLng(39.981787, 116.306649));
// listPoints.add(new LatLng(39.982021, 116.306739));
// listPoints.add(new LatLng(39.982351, 116.306883));
// listPoints.add(new LatLng(39.98233, 116.306047));
// listPoints.add(new LatLng(39.982324, 116.305867));
// listPoints.add(new LatLng(39.981918, 116.305885));
// listPoints.add(new LatLng(39.981298, 116.305921));
// listPoints.add(new LatLng(39.981091, 116.305939));
// listPoints.add(new LatLng(39.980506, 116.305975));
// listPoints.add(new LatLng(39.980148, 116.306002));
// listPoints.add(new LatLng(39.980121, 116.306002));
// listPoints.add(new LatLng(39.979708, 116.306038));
// listPoints.add(new LatLng(39.979205, 116.306074));
// listPoints.add(new LatLng(39.979205, 116.306074));
// listPoints.add(new LatLng(39.978813, 116.306101));
// listPoints.add(new LatLng(39.978015, 116.306182));
// listPoints.add(new LatLng(39.977299, 116.306227));
// listPoints.add(new LatLng(39.976996, 116.306245));
// listPoints.add(new LatLng(39.976913, 116.306245));
// listPoints.add(new LatLng(39.97597, 116.306308));
// listPoints.add(new LatLng(39.97575, 116.306326));
// listPoints.add(new LatLng(39.97564, 116.306335));
// listPoints.add(new LatLng(39.975178, 116.306371));
// listPoints.add(new LatLng(39.975185, 116.306514));
// listPoints.add(new LatLng(39.97564, 116.306272));
// listPoints.add(new LatLng(39.975633, 116.306272));
// listPoints.add(new LatLng(39.975715, 116.307997));
// listPoints.add(new LatLng(39.975819, 116.311545));
// listPoints.add(new LatLng(39.975936, 116.314878));
// listPoints.add(new LatLng(39.975998, 116.317528));
// listPoints.add(new LatLng(39.976025, 116.318785));
// listPoints.add(new LatLng(39.976108, 116.321714));
// listPoints.add(new LatLng(39.976259, 116.326843));
// listPoints.add(new LatLng(39.976328, 116.328622));
// listPoints.add(new LatLng(39.976397, 116.330356));
// listPoints.add(new LatLng(39.9765, 116.333967));
// listPoints.add(new LatLng(39.976459, 116.341019));
// listPoints.add(new LatLng(39.976473, 116.341674));
// listPoints.add(new LatLng(39.976473, 116.341944));
// listPoints.add(new LatLng(39.976473, 116.342546));
// listPoints.add(new LatLng(39.976479, 116.345295));
// listPoints.add(new LatLng(39.976197, 116.353829));
// listPoints.add(new LatLng(39.976459, 116.369926));
// listPoints.add(new LatLng(39.97672, 116.381353));
// }
//
// private static void addLine2(List<LatLng> listPoints) {
// listPoints.add(new LatLng(39.91254, 116.41786));
// listPoints.add(new LatLng(39.911258, 116.417905));
// listPoints.add(new LatLng(39.910459, 116.417923));
// listPoints.add(new LatLng(39.908557, 116.418049));
// listPoints.add(new LatLng(39.908337, 116.418058));
// listPoints.add(new LatLng(39.90824, 116.418067));
// listPoints.add(new LatLng(39.90669, 116.418148));
// listPoints.add(new LatLng(39.904795, 116.418283));
// listPoints.add(new LatLng(39.903416, 116.418265));
// listPoints.add(new LatLng(39.901218, 116.418408));
// listPoints.add(new LatLng(39.900805, 116.418417));
// listPoints.add(new LatLng(39.900805, 116.418426));
// listPoints.add(new LatLng(39.901335, 116.417968));
// listPoints.add(new LatLng(39.901342, 116.417968));
// listPoints.add(new LatLng(39.901342, 116.418004));
// listPoints.add(new LatLng(39.901197, 116.418193));
// listPoints.add(new LatLng(39.901204, 116.418426));
// listPoints.add(new LatLng(39.901218, 116.418552));
// listPoints.add(new LatLng(39.901087, 116.418624));
// listPoints.add(new LatLng(39.901053, 116.41884));
// listPoints.add(new LatLng(39.901004, 116.419028));
// listPoints.add(new LatLng(39.900922, 116.419388));
// listPoints.add(new LatLng(39.900839, 116.419774));
// listPoints.add(new LatLng(39.900749, 116.420043));
// listPoints.add(new LatLng(39.900722, 116.420178));
// listPoints.add(new LatLng(39.900667, 116.42034));
// listPoints.add(new LatLng(39.900619, 116.420519));
// listPoints.add(new LatLng(39.900557, 116.420744));
// listPoints.add(new LatLng(39.900515, 116.420915));
// listPoints.add(new LatLng(39.900488, 116.421067));
// listPoints.add(new LatLng(39.900467, 116.421274));
// listPoints.add(new LatLng(39.900467, 116.421301));
// listPoints.add(new LatLng(39.900467, 116.421301));
// listPoints.add(new LatLng(39.900674, 116.428856));
// listPoints.add(new LatLng(39.900681, 116.429287));
// listPoints.add(new LatLng(39.900674, 116.429287));
// listPoints.add(new LatLng(39.900694, 116.429745));
// listPoints.add(new LatLng(39.900736, 116.43173));
// listPoints.add(new LatLng(39.900729, 116.433132));
// listPoints.add(new LatLng(39.900729, 116.433267));
// listPoints.add(new LatLng(39.900743, 116.433545));
// }
//
// private static void addLine1(List<LatLng> listPoints) {
// listPoints.add(new LatLng(39.976748, 116.382314));
// listPoints.add(new LatLng(39.976851, 116.388045));
// listPoints.add(new LatLng(39.976892, 116.393597));
// listPoints.add(new LatLng(39.976906, 116.394199));
// listPoints.add(new LatLng(39.976906, 116.394298));
// listPoints.add(new LatLng(39.976996, 116.405949));
// listPoints.add(new LatLng(39.977016, 116.407692));
// listPoints.add(new LatLng(39.97701, 116.417564));
// listPoints.add(new LatLng(39.97701, 116.417564));
// listPoints.add(new LatLng(39.977127, 116.417591));
// listPoints.add(new LatLng(39.977127, 116.417582));
// listPoints.add(new LatLng(39.969017, 116.417932));
// listPoints.add(new LatLng(39.968549, 116.417977));
// listPoints.add(new LatLng(39.9666, 116.418094));
// listPoints.add(new LatLng(39.965099, 116.418193));
// listPoints.add(new LatLng(39.963957, 116.418256));
// listPoints.add(new LatLng(39.961533, 116.418301));
// listPoints.add(new LatLng(39.959343, 116.418301));
// listPoints.add(new LatLng(39.95422, 116.418732));
// listPoints.add(new LatLng(39.952375, 116.418858));
// listPoints.add(new LatLng(39.952106, 116.418876));
// listPoints.add(new LatLng(39.95192, 116.418849));
// listPoints.add(new LatLng(39.951693, 116.418696));
// listPoints.add(new LatLng(39.951528, 116.418525));
// listPoints.add(new LatLng(39.951383, 116.41822));
// listPoints.add(new LatLng(39.95128, 116.417941));
// listPoints.add(new LatLng(39.951239, 116.417609));
// listPoints.add(new LatLng(39.951218, 116.417312));
// listPoints.add(new LatLng(39.951218, 116.417088));
// listPoints.add(new LatLng(39.951197, 116.416899));
// listPoints.add(new LatLng(39.951115, 116.416675));
// listPoints.add(new LatLng(39.950984, 116.416513));
// listPoints.add(new LatLng(39.950839, 116.416378));
// listPoints.add(new LatLng(39.950639, 116.41627));
// listPoints.add(new LatLng(39.950426, 116.416217));
// listPoints.add(new LatLng(39.950095, 116.416243));
// listPoints.add(new LatLng(39.948835, 116.416486));
// listPoints.add(new LatLng(39.948697, 116.416486));
// listPoints.add(new LatLng(39.945557, 116.416648));
// listPoints.add(new LatLng(39.941686, 116.416791));
// listPoints.add(new LatLng(39.941005, 116.4168));
// listPoints.add(new LatLng(39.938442, 116.416944));
// listPoints.add(new LatLng(39.936045, 116.417016));
// listPoints.add(new LatLng(39.933662, 116.417142));
// listPoints.add(new LatLng(39.929247, 116.417295));
// listPoints.add(new LatLng(39.927683, 116.417393));
// listPoints.add(new LatLng(39.926553, 116.417438));
// listPoints.add(new LatLng(39.924583, 116.417492));
// listPoints.add(new LatLng(39.924369, 116.417492));
// listPoints.add(new LatLng(39.921779, 116.417573));
// listPoints.add(new LatLng(39.919044, 116.417654));
// listPoints.add(new LatLng(39.917404, 116.417708));
// listPoints.add(new LatLng(39.917287, 116.417717));
// listPoints.add(new LatLng(39.916233, 116.417825));
// listPoints.add(new LatLng(39.913904, 116.417807));
// }
}

View File

@ -1,87 +1,87 @@
package cc.winboll.studio.positions.demo.polyline;
import android.os.Bundle;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.util.ArrayList;
import java.util.List;
public class PolylineOptionsActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Polyline polyline = tencentMap.addPolyline(polylineOptions);
Polyline newPolyline = tencentMap.addPolyline(newPolylineOptions);
polyline.pattern(patternLine(patterns)); //设置虚线样式
}
private int[] patterns = {10, 15, 20};
private List<Integer> patternLine(int [] patterns){
List<Integer> patternLine = new ArrayList<>();
if (patterns == null)
return patternLine;
for (int i = 0; i < patterns.length; i++)
patternLine.add(patterns[i]);
return patternLine;
}
private List<LatLng> transferArrayToList(LatLng[] latLngs){ //坐标数组与List转换
List<LatLng> list = new ArrayList<>();
if (latLngs == null)
return list;
for (int i = 0; i < latLngs.length; i++)
list.add(latLngs[i]);
return list;
}
private LatLng[] latLngs = {
new LatLng(39.984864, 116.305756),
new LatLng(39.983618, 116.305848),
new LatLng(39.982347, 116.305966),
new LatLng(39.982412, 116.308111),
new LatLng(39.984122, 116.308224),
new LatLng(39.984955, 116.308099),
new LatLng(39.984864, 116.305756)
};
private LatLng[] newLatLngs = {
new LatLng(39.984864, 116.305756),
new LatLng(39.983618, 116.305848),
new LatLng(39.982347, 116.305966),
new LatLng(39.982412, 116.308111),
new LatLng(39.984122, 116.308224),
new LatLng(39.984955, 116.308099),
new LatLng(39.984864, 116.305756)
};
private PolylineOptions polylineOptions = new PolylineOptions().
addAll(transferArrayToList(latLngs)). //添加顶点
alpha(0.5f). //设置透明度
arrow(true). //导航用 接口
arrowSpacing(110). // 设置方向箭头间距
arrowTexture(BitmapDescriptorFactory.fromAsset("color_arrow_texture.png")). // 设置箭头纹理
borderColor(0xaa323456). //设置描边颜色
borderWidth(1f). //设置描边宽度
clickable(true). //可点击
color(PolylineOptions.Colors.LIGHT_BLUE). //线的颜色
colorTexture(BitmapDescriptorFactory.fromAsset("color_texture.png")). //颜色纹理
lineCap(true). //路线是否显示半圆端点
lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE). //设置线的类型
visible(true). //设置折线可见性
width(10f). //设置线的宽度
zIndex(0); //堆叠顺序越大优先级越高
private PolylineOptions newPolylineOptions = new PolylineOptions().add(newLatLngs).
lineType(PolylineOptions.LineType.LINE_TYPE_DOTTEDLINE).
visible(true).
pattern(patternLine(patterns)).
zIndex(1);
}
//import android.os.Bundle;
//
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
//import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
//
//import java.util.ArrayList;
//import java.util.List;
//
//public class PolylineOptionsActivity extends SupportMapFragmentActivity {
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// Polyline polyline = tencentMap.addPolyline(polylineOptions);
// Polyline newPolyline = tencentMap.addPolyline(newPolylineOptions);
// polyline.pattern(patternLine(patterns)); //设置虚线样式
// }
//
// private int[] patterns = {10, 15, 20};
// private List<Integer> patternLine(int [] patterns){
// List<Integer> patternLine = new ArrayList<>();
// if (patterns == null)
// return patternLine;
// for (int i = 0; i < patterns.length; i++)
// patternLine.add(patterns[i]);
// return patternLine;
// }
//
//
// private List<LatLng> transferArrayToList(LatLng[] latLngs){ //坐标数组与List转换
// List<LatLng> list = new ArrayList<>();
// if (latLngs == null)
// return list;
// for (int i = 0; i < latLngs.length; i++)
// list.add(latLngs[i]);
//
// return list;
//
// }
//
// private LatLng[] latLngs = {
// new LatLng(39.984864, 116.305756),
// new LatLng(39.983618, 116.305848),
// new LatLng(39.982347, 116.305966),
// new LatLng(39.982412, 116.308111),
// new LatLng(39.984122, 116.308224),
// new LatLng(39.984955, 116.308099),
// new LatLng(39.984864, 116.305756)
// };
//
// private LatLng[] newLatLngs = {
// new LatLng(39.984864, 116.305756),
// new LatLng(39.983618, 116.305848),
// new LatLng(39.982347, 116.305966),
// new LatLng(39.982412, 116.308111),
// new LatLng(39.984122, 116.308224),
// new LatLng(39.984955, 116.308099),
// new LatLng(39.984864, 116.305756)
// };
// private PolylineOptions polylineOptions = new PolylineOptions().
// addAll(transferArrayToList(latLngs)). //添加顶点
// alpha(0.5f). //设置透明度
// arrow(true). //导航用 接口
// arrowSpacing(110). // 设置方向箭头间距
// arrowTexture(BitmapDescriptorFactory.fromAsset("color_arrow_texture.png")). // 设置箭头纹理
// borderColor(0xaa323456). //设置描边颜色
// borderWidth(1f). //设置描边宽度
// clickable(true). //可点击
// color(PolylineOptions.Colors.LIGHT_BLUE). //线的颜色
// colorTexture(BitmapDescriptorFactory.fromAsset("color_texture.png")). //颜色纹理
// lineCap(true). //路线是否显示半圆端点
// lineType(PolylineOptions.LineType.LINE_TYPE_MULTICOLORLINE). //设置线的类型
// visible(true). //设置折线可见性
// width(10f). //设置线的宽度
// zIndex(0); //堆叠顺序越大优先级越高
//
//
// private PolylineOptions newPolylineOptions = new PolylineOptions().add(newLatLngs).
// lineType(PolylineOptions.LineType.LINE_TYPE_DOTTEDLINE).
// visible(true).
// pattern(patternLine(patterns)).
// zIndex(1);
//}

View File

@ -21,154 +21,154 @@ import java.util.ArrayList;
import java.util.List;
public class DistrictActivity extends SupportMapFragmentActivity {
private Spinner spProvince;
private Spinner spCity;
private Spinner spDistrict;
private TextView tvResult;
private List<LatLng> latLngs = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
initSpinner();
}
protected void initView() {
spProvince = (Spinner) findViewById(R.id.sp_province);
spCity = (Spinner) findViewById(R.id.sp_city);
spDistrict = (Spinner) findViewById(R.id.sp_district);
tvResult = (TextView) findViewById(R.id.tv_result);
spProvince.setVisibility(View.VISIBLE);
spCity.setVisibility(View.VISIBLE);
spDistrict.setVisibility(View.VISIBLE);
tvResult.setVisibility(View.VISIBLE);
}
protected void initSpinner() {
//初始化行政区划像北京市等只有市和区两级的数据可能会输出错误id
getDistrict(0, R.id.sp_province);
AdapterView.OnItemSelectedListener onItemSelectedListener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
switch (parent.getId()) {
case R.id.sp_province:
getDistrict(((List<Integer>) parent.getTag()).
get(position).intValue(), R.id.sp_city);
break;
case R.id.sp_city:
getDistrict(((List<Integer>) parent.getTag()).
get(position).intValue(), R.id.sp_district);
break;
case R.id.sp_district:
getDistrict(((List<Integer>) parent.getTag()).
get(position).intValue(), R.id.sp_district);
tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(latLngs.get(position), 15f, 0, 0)));
default:
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};
spProvince.setOnItemSelectedListener(onItemSelectedListener);
spCity.setOnItemSelectedListener(onItemSelectedListener);
spDistrict.setOnItemSelectedListener(onItemSelectedListener);
}
/**
* 获取行政区划
*/
protected void getDistrict(int pDistrict, final int spId) {
TencentSearch tencentSearch = new TencentSearch(this);
DistrictChildrenParam districtChildrenParam = new DistrictChildrenParam();
Log.d("eqrwqeqewr", "getDistrict: " + spId);
//如果不设置id则获取全部数据
if (spId != R.id.sp_province && spId == R.id.sp_city) {
districtChildrenParam.id(pDistrict);
}
if (spId != R.id.sp_province && spId != R.id.sp_city) {
districtChildrenParam.id(pDistrict);
}
tencentSearch.getDistrictChildren(districtChildrenParam, new HttpResponseListener<BaseObject>() {
@Override
public void onSuccess(int arg0, BaseObject arg1) {
// TODO Auto-generated method stub
if (arg1 == null) {
return;
}
DistrictResultObject obj = (DistrictResultObject) arg1;
switch (spId) {
case R.id.sp_province:
setDistrictAdapter(spProvince, obj);
break;
case R.id.sp_city:
setDistrictAdapter(spCity, obj);
break;
case R.id.sp_district:
setDistrictAdapter(spDistrict, obj);
break;
default:
break;
}
}
@Override
public void onFailure(int arg0, String arg1, Throwable arg2) {
// TODO Auto-generated method stub
// printResult(arg1);
}
});
}
/**
* 设置行政区划的adapter
*
* @param spinner 要设置adapter的spinner
* @param obj 用于填充adapter的数据源
*/
protected void setDistrictAdapter(Spinner spinner, final DistrictResultObject obj) {
List<String> names = new ArrayList<String>();
List<Integer> ids = new ArrayList<Integer>();
latLngs.clear();
final List<DistrictResultObject.DistrictResult> districtResults = obj.result.get(0);
for (final DistrictResultObject.DistrictResult result : districtResults) {
names.add(result.fullname);
ids.add(result.id);
latLngs.add(result.latLng);
Log.d("位置", "setDistrictAdapter: " + result.fullname);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, names);
spinner.setAdapter(adapter);
//将行政区划编码附到spinner方便后续查询
spinner.setTag(ids);
}
protected void printResult(final String result) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
tvResult.setText(result);
}
});
}
// private Spinner spProvince;
// private Spinner spCity;
// private Spinner spDistrict;
// private TextView tvResult;
// private List<LatLng> latLngs = new ArrayList<>();
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// initView();
// initSpinner();
// }
//
// protected void initView() {
// spProvince = (Spinner) findViewById(R.id.sp_province);
// spCity = (Spinner) findViewById(R.id.sp_city);
// spDistrict = (Spinner) findViewById(R.id.sp_district);
// tvResult = (TextView) findViewById(R.id.tv_result);
// spProvince.setVisibility(View.VISIBLE);
// spCity.setVisibility(View.VISIBLE);
// spDistrict.setVisibility(View.VISIBLE);
// tvResult.setVisibility(View.VISIBLE);
// }
//
// protected void initSpinner() {
//
// //初始化行政区划像北京市等只有市和区两级的数据可能会输出错误id
// getDistrict(0, R.id.sp_province);
// AdapterView.OnItemSelectedListener onItemSelectedListener = new AdapterView.OnItemSelectedListener() {
//
// @Override
// public void onItemSelected(AdapterView<?> parent, View view,
// int position, long id) {
// // TODO Auto-generated method stub
// switch (parent.getId()) {
// case R.id.sp_province:
// getDistrict(((List<Integer>) parent.getTag()).
// get(position).intValue(), R.id.sp_city);
// break;
// case R.id.sp_city:
// getDistrict(((List<Integer>) parent.getTag()).
// get(position).intValue(), R.id.sp_district);
// break;
// case R.id.sp_district:
// getDistrict(((List<Integer>) parent.getTag()).
// get(position).intValue(), R.id.sp_district);
// tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(latLngs.get(position), 15f, 0, 0)));
// default:
// break;
// }
// }
//
// @Override
// public void onNothingSelected(AdapterView<?> parent) {
// // TODO Auto-generated method stub
//
// }
// };
// spProvince.setOnItemSelectedListener(onItemSelectedListener);
// spCity.setOnItemSelectedListener(onItemSelectedListener);
// spDistrict.setOnItemSelectedListener(onItemSelectedListener);
// }
//
// /**
// * 获取行政区划
// */
// protected void getDistrict(int pDistrict, final int spId) {
// TencentSearch tencentSearch = new TencentSearch(this);
// DistrictChildrenParam districtChildrenParam = new DistrictChildrenParam();
// Log.d("eqrwqeqewr", "getDistrict: " + spId);
// //如果不设置id则获取全部数据
// if (spId != R.id.sp_province && spId == R.id.sp_city) {
// districtChildrenParam.id(pDistrict);
// }
// if (spId != R.id.sp_province && spId != R.id.sp_city) {
// districtChildrenParam.id(pDistrict);
// }
//
// tencentSearch.getDistrictChildren(districtChildrenParam, new HttpResponseListener<BaseObject>() {
//
// @Override
// public void onSuccess(int arg0, BaseObject arg1) {
// // TODO Auto-generated method stub
// if (arg1 == null) {
// return;
// }
// DistrictResultObject obj = (DistrictResultObject) arg1;
// switch (spId) {
// case R.id.sp_province:
// setDistrictAdapter(spProvince, obj);
// break;
// case R.id.sp_city:
// setDistrictAdapter(spCity, obj);
// break;
// case R.id.sp_district:
// setDistrictAdapter(spDistrict, obj);
// break;
//
// default:
// break;
// }
// }
//
// @Override
// public void onFailure(int arg0, String arg1, Throwable arg2) {
// // TODO Auto-generated method stub
// // printResult(arg1);
// }
// });
// }
//
// /**
// * 设置行政区划的adapter
// *
// * @param spinner 要设置adapter的spinner
// * @param obj 用于填充adapter的数据源
// */
// protected void setDistrictAdapter(Spinner spinner, final DistrictResultObject obj) {
// List<String> names = new ArrayList<String>();
// List<Integer> ids = new ArrayList<Integer>();
// latLngs.clear();
// final List<DistrictResultObject.DistrictResult> districtResults = obj.result.get(0);
// for (final DistrictResultObject.DistrictResult result : districtResults) {
// names.add(result.fullname);
// ids.add(result.id);
// latLngs.add(result.latLng);
// Log.d("位置", "setDistrictAdapter: " + result.fullname);
//
// }
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
// android.R.layout.simple_spinner_item, names);
// spinner.setAdapter(adapter);
// //将行政区划编码附到spinner方便后续查询
// spinner.setTag(ids);
//
// }
//
//
// protected void printResult(final String result) {
// runOnUiThread(new Runnable() {
//
// @Override
// public void run() {
// // TODO Auto-generated method stub
// tvResult.setText(result);
// }
// });
// }
//
}

View File

@ -18,58 +18,58 @@ import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.util.List;
public class DrivingRouteActivity extends SupportMapFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(24.66493, 117.09568),
15,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
getDrivingRoute();
}
private LatLng fromPoint = new LatLng(24.66493, 117.09568); // 起点坐标
private LatLng toPoint = new LatLng(26.8857, 120.00514); //终点坐标
/**
* 获取驾车路线规划
*/
private void getDrivingRoute() {
long l = (System.currentTimeMillis() / 1000)+1000;
Log.d("时间戳", "getDrivingRoute: " + l);
DrivingParam drivingParam = new DrivingParam(fromPoint, toPoint); //创建导航参数
drivingParam.roadType(DrivingParam.RoadType.ON_MAIN_ROAD_BELOW_BRIDGE);
drivingParam.heading(90);
drivingParam.accuracy(30);
//drivingParam.departureTime(l)
TencentSearch tencentSearch = new TencentSearch(this);
tencentSearch.getRoutePlan(drivingParam, new HttpResponseListener<DrivingResultObject>() {
@Override
public void onSuccess(int i, DrivingResultObject drivingResultObject) {
if (drivingResultObject == null) {
return;
}
for (DrivingResultObject.Route route : drivingResultObject.result.routes) {
List<LatLng> lines = route.polyline;
tencentMap.addPolyline(new PolylineOptions().addAll(lines).color(0x22ff0000));
tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
.include(route.polyline).build(), 100));
tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
.include(lines).build(), 100));
}
}
@Override
public void onFailure(int i, String s, Throwable throwable) {
}
});
}
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(24.66493, 117.09568),
// 15,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// getDrivingRoute();
// }
//
// private LatLng fromPoint = new LatLng(24.66493, 117.09568); // 起点坐标
// private LatLng toPoint = new LatLng(26.8857, 120.00514); //终点坐标
//
// /**
// * 获取驾车路线规划
// */
// private void getDrivingRoute() {
// long l = (System.currentTimeMillis() / 1000)+1000;
// Log.d("时间戳", "getDrivingRoute: " + l);
// DrivingParam drivingParam = new DrivingParam(fromPoint, toPoint); //创建导航参数
// drivingParam.roadType(DrivingParam.RoadType.ON_MAIN_ROAD_BELOW_BRIDGE);
// drivingParam.heading(90);
// drivingParam.accuracy(30);
// //drivingParam.departureTime(l)
// TencentSearch tencentSearch = new TencentSearch(this);
// tencentSearch.getRoutePlan(drivingParam, new HttpResponseListener<DrivingResultObject>() {
//
// @Override
// public void onSuccess(int i, DrivingResultObject drivingResultObject) {
// if (drivingResultObject == null) {
// return;
// }
// for (DrivingResultObject.Route route : drivingResultObject.result.routes) {
// List<LatLng> lines = route.polyline;
// tencentMap.addPolyline(new PolylineOptions().addAll(lines).color(0x22ff0000));
// tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
// .include(route.polyline).build(), 100));
// tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
// .include(lines).build(), 100));
// }
// }
//
// @Override
// public void onFailure(int i, String s, Throwable throwable) {
//
// }
// });
// }
}

View File

@ -25,162 +25,162 @@ import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
public class GeoCoderActivity extends SupportMapFragmentActivity {
private EditText etGeocoder;
private Button btnGeocoder;
private EditText etRegeocoder;
private Button btnRegeocoder;
private TextView tvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
}
private void initView(){
etGeocoder = (EditText) findViewById(R.id.et_geocoder);
btnGeocoder = (Button) findViewById(R.id.btn_geocoder);
etRegeocoder = (EditText) findViewById(R.id.et_regeocoder);
btnRegeocoder = (Button) findViewById(R.id.btn_regeocoder);
etGeocoder.setVisibility(View.VISIBLE);
btnGeocoder.setVisibility(View.VISIBLE);
etRegeocoder.setVisibility(View.VISIBLE);
btnRegeocoder.setVisibility(View.VISIBLE);
tvResult = (TextView) findViewById(R.id.tv_result);
tvResult.setVisibility(View.VISIBLE);
btnGeocoder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
geocoder();
}
});
btnRegeocoder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
reGeocoder();
}
});
}
/**
*地理编码
*/
protected void geocoder() {
TencentSearch tencentSearch = new TencentSearch(this);
String address = etGeocoder.getText().toString();
Address2GeoParam address2GeoParam =
new Address2GeoParam(address).region("北京");
tencentSearch.address2geo(address2GeoParam, new HttpResponseListener<BaseObject>() {
@Override
public void onSuccess(int arg0, BaseObject arg1) {
// TODO Auto-generated method stub
if (arg1 == null) {
return;
}
Address2GeoResultObject obj = (Address2GeoResultObject)arg1;
StringBuilder sb = new StringBuilder();
sb.append("地址解析");
if (obj.result.latLng != null) {
sb.append("\n坐标" + obj.result.latLng.toString());
} else {
sb.append("\n无坐标");
}
printResult(sb.toString());
tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(obj.result.latLng,15f, 0, 0)));
tencentMap.addMarker(new MarkerOptions()
.position(obj.result.latLng));
}
@Override
public void onFailure(int arg0, String arg1, Throwable arg2) {
// TODO Auto-generated method stub
printResult(arg1);
}
});
}
/**
* 逆地理编码
*/
protected void reGeocoder() {
String str = etRegeocoder.getText().toString().trim();
LatLng latLng = str2Coordinate(this, str);
if (latLng == null) {
return;
}
TencentSearch tencentSearch = new TencentSearch(this);
//还可以传入其他坐标系的坐标不过需要用coord_type()指明所用类型
//这里设置返回周边poi列表可以在一定程度上满足用户获取指定坐标周边poi的需求
Geo2AddressParam geo2AddressParam = new Geo2AddressParam(latLng).getPoi(true)
.setPoiOptions(new Geo2AddressParam.PoiOptions()
.setRadius(1000).setCategorys("面包")
.setPolicy(Geo2AddressParam.PoiOptions.POLICY_O2O));
tencentSearch.geo2address(geo2AddressParam, new HttpResponseListener<BaseObject>() {
@Override
public void onSuccess(int arg0, BaseObject arg1) {
// TODO Auto-generated method stub
if (arg1 == null) {
return;
}
Geo2AddressResultObject obj = (Geo2AddressResultObject)arg1;
StringBuilder sb = new StringBuilder();
sb.append("逆地址解析");
sb.append("\n地址" + obj.result.address);
sb.append("\npois:");
for (Poi poi : obj.result.pois) {
sb.append("\n\t" + poi.title);
tencentMap.addMarker(new MarkerOptions()
.position(poi.latLng) //标注的位置
.title(poi.title) //标注的InfoWindow的标题
.snippet(poi.address) //标注的InfoWindow的内容
);
}
//printResult(sb.toString());
}
@Override
public void onFailure(int arg0, String arg1, Throwable arg2) {
// TODO Auto-generated method stub
printResult(arg1);
}
});
}
/**
* 由字符串获取坐标
* @param context
* @param str
* @return
*/
public static LatLng str2Coordinate(Context context, String str) {
if (!str.contains(",")) {
Toast.makeText(context, "经纬度用\",\"分割", Toast.LENGTH_SHORT).show();
return null;
}
String[] strs = str.split(",");
double lat = 0;
double lng = 0;
try {
lat = Double.parseDouble(strs[0]);
lng = Double.parseDouble(strs[1]);
} catch (NumberFormatException e) {
Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show();
return null;
}
return new LatLng(lat, lng);
}
protected void printResult(final String result) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
tvResult.setText(result);
}
});
}
// private EditText etGeocoder;
// private Button btnGeocoder;
// private EditText etRegeocoder;
// private Button btnRegeocoder;
// private TextView tvResult;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// initView();
// }
//
//
// private void initView(){
// etGeocoder = (EditText) findViewById(R.id.et_geocoder);
// btnGeocoder = (Button) findViewById(R.id.btn_geocoder);
// etRegeocoder = (EditText) findViewById(R.id.et_regeocoder);
// btnRegeocoder = (Button) findViewById(R.id.btn_regeocoder);
// etGeocoder.setVisibility(View.VISIBLE);
// btnGeocoder.setVisibility(View.VISIBLE);
// etRegeocoder.setVisibility(View.VISIBLE);
// btnRegeocoder.setVisibility(View.VISIBLE);
// tvResult = (TextView) findViewById(R.id.tv_result);
// tvResult.setVisibility(View.VISIBLE);
// btnGeocoder.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// geocoder();
// }
// });
//
// btnRegeocoder.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// reGeocoder();
// }
// });
// }
// /**
// *地理编码
// */
// protected void geocoder() {
// TencentSearch tencentSearch = new TencentSearch(this);
// String address = etGeocoder.getText().toString();
// Address2GeoParam address2GeoParam =
// new Address2GeoParam(address).region("北京");
// tencentSearch.address2geo(address2GeoParam, new HttpResponseListener<BaseObject>() {
//
// @Override
// public void onSuccess(int arg0, BaseObject arg1) {
// // TODO Auto-generated method stub
// if (arg1 == null) {
// return;
// }
// Address2GeoResultObject obj = (Address2GeoResultObject)arg1;
// StringBuilder sb = new StringBuilder();
// sb.append("地址解析");
// if (obj.result.latLng != null) {
// sb.append("\n坐标" + obj.result.latLng.toString());
// } else {
// sb.append("\n无坐标");
// }
// printResult(sb.toString());
// tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(obj.result.latLng,15f, 0, 0)));
// tencentMap.addMarker(new MarkerOptions()
// .position(obj.result.latLng));
// }
//
// @Override
// public void onFailure(int arg0, String arg1, Throwable arg2) {
// // TODO Auto-generated method stub
// printResult(arg1);
// }
// });
// }
//
// /**
// * 逆地理编码
// */
// protected void reGeocoder() {
// String str = etRegeocoder.getText().toString().trim();
// LatLng latLng = str2Coordinate(this, str);
// if (latLng == null) {
// return;
// }
// TencentSearch tencentSearch = new TencentSearch(this);
// //还可以传入其他坐标系的坐标不过需要用coord_type()指明所用类型
// //这里设置返回周边poi列表可以在一定程度上满足用户获取指定坐标周边poi的需求
// Geo2AddressParam geo2AddressParam = new Geo2AddressParam(latLng).getPoi(true)
// .setPoiOptions(new Geo2AddressParam.PoiOptions()
// .setRadius(1000).setCategorys("面包")
// .setPolicy(Geo2AddressParam.PoiOptions.POLICY_O2O));
// tencentSearch.geo2address(geo2AddressParam, new HttpResponseListener<BaseObject>() {
//
// @Override
// public void onSuccess(int arg0, BaseObject arg1) {
// // TODO Auto-generated method stub
// if (arg1 == null) {
// return;
// }
// Geo2AddressResultObject obj = (Geo2AddressResultObject)arg1;
// StringBuilder sb = new StringBuilder();
// sb.append("逆地址解析");
// sb.append("\n地址" + obj.result.address);
// sb.append("\npois:");
// for (Poi poi : obj.result.pois) {
// sb.append("\n\t" + poi.title);
// tencentMap.addMarker(new MarkerOptions()
// .position(poi.latLng) //标注的位置
// .title(poi.title) //标注的InfoWindow的标题
// .snippet(poi.address) //标注的InfoWindow的内容
// );
// }
// //printResult(sb.toString());
// }
//
// @Override
// public void onFailure(int arg0, String arg1, Throwable arg2) {
// // TODO Auto-generated method stub
// printResult(arg1);
// }
// });
// }
//
//
// /**
// * 由字符串获取坐标
// * @param context
// * @param str
// * @return
// */
// public static LatLng str2Coordinate(Context context, String str) {
// if (!str.contains(",")) {
// Toast.makeText(context, "经纬度用\",\"分割", Toast.LENGTH_SHORT).show();
// return null;
// }
// String[] strs = str.split(",");
// double lat = 0;
// double lng = 0;
// try {
// lat = Double.parseDouble(strs[0]);
// lng = Double.parseDouble(strs[1]);
// } catch (NumberFormatException e) {
// Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show();
// return null;
// }
// return new LatLng(lat, lng);
// }
// protected void printResult(final String result) {
// runOnUiThread(new Runnable() {
//
// @Override
// public void run() {
// // TODO Auto-generated method stub
// tvResult.setText(result);
// }
// });
// }
}

View File

@ -34,272 +34,272 @@ import java.lang.ref.WeakReference;
import java.util.List;
public class SearchBasicActivity extends SupportMapFragmentActivity {
private EditText etSearch;
private Button btnSearch;
private ListView lvSuggesion;
private SuggestionAdapter suggestionAdapter;
private final int MSG_SUGGESTION = 10000;
private final MyHandler handler = new MyHandler(this);
private static class MyHandler extends Handler {
private final WeakReference<SearchBasicActivity> mActivity;
public MyHandler(SearchBasicActivity activity) {
// TODO Auto-generated constructor stub
mActivity = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
SearchBasicActivity activity = mActivity.get();
if (activity != null) {
activity.handleMessage(msg);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
}
protected void initView(){
etSearch = (EditText) findViewById(R.id.et_search_poi);
btnSearch = (Button) findViewById(R.id.btn_search_poi);
etSearch.setVisibility(View.VISIBLE);
btnSearch.setVisibility(View.VISIBLE);
lvSuggesion = (ListView) findViewById(R.id.lv_suggestions);
etSearch.addTextChangedListener(textWatcher);
etSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (!etSearch.hasFocus()) {
lvSuggesion.setVisibility(View.GONE);
}
}
});
lvSuggesion.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
etSearch.removeTextChangedListener(textWatcher);
CharSequence cs =
((TextView)view.findViewById(R.id.label)).getText();
etSearch.setText(cs);
lvSuggesion.setVisibility(View.GONE);
etSearch.addTextChangedListener(textWatcher);
}
});
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
searchPoi();
}
});
}
final TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
suggestion(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
/**
* poi检索
*/
protected void searchPoi() {
TencentSearch tencentSearch = new TencentSearch(this);
String keyWord = etSearch.getText().toString().trim();
//城市搜索
SearchParam.Region region = new SearchParam.Region("北京").//设置搜索城市
autoExtend(false);//设置搜索范围不扩大
//圆形范围搜索
LatLng latLng1 = new LatLng(39.984154, 116.307490);
SearchParam.Nearby nearBy = new SearchParam.Nearby(latLng1, 1000);
//矩形搜索这里的范围是故宫
LatLng latLng2 = new LatLng(39.913127, 116.392164);
LatLng latLng3 = new LatLng(39.923034, 116.402078);
SearchParam.Rectangle rectangle = new SearchParam.Rectangle(latLng2, latLng3);
//filter()方法可以设置过滤类别
//search接口还提供了排序方式返回条目数返回页码具体用法见文档
//同时也可以参考官网的webservice对应接口的说明
SearchParam searchParam = new SearchParam(keyWord, region);//.pageIndex(0).pageSize(20).filter("大学,中学");
tencentSearch.search(searchParam, new HttpResponseListener<BaseObject>() {
@Override
public void onFailure(int arg0, String arg2,
Throwable arg3) {
Toast.makeText(getApplicationContext(), arg2, Toast.LENGTH_LONG).show();
}
@Override
public void onSuccess(int arg0, BaseObject arg1) {
if (arg1 == null) {
return;
}
SearchResultObject obj = (SearchResultObject) arg1;
if(obj.data == null){
return;
}
tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(obj.data.get(0).latLng,15f, 0, 0)));
for(SearchResultObject.SearchResultData data : obj.data){
Log.v("SearchDemo","title:"+data.title + ";" + data.address);
tencentMap.addMarker(new MarkerOptions()
.position(data.latLng) //标注的位置
.title(data.title) //标注的InfoWindow的标题
.snippet(data.address) //标注的InfoWindow的内容
);
}
}
});
}
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SUGGESTION:
showAutoComplete((SuggestionResultObject)msg.obj);
break;
default:
break;
}
}
/**
* 显示完整ListView
* @param obj
*/
protected void showAutoComplete(SuggestionResultObject obj) {
if (obj.data.size() == 0) {
lvSuggesion.setVisibility(View.GONE);
return;
}
if (suggestionAdapter == null) {
suggestionAdapter = new SuggestionAdapter(obj.data);
lvSuggesion.setAdapter(suggestionAdapter);
} else {
suggestionAdapter.setDatas(obj.data);
suggestionAdapter.notifyDataSetChanged();
}
lvSuggesion.setVisibility(View.VISIBLE);
}
/**
* 关键字提示
* @param keyword
*/
protected void suggestion(String keyword) {
if (keyword.trim().length() == 0) {
lvSuggesion.setVisibility(View.GONE);
return;
}
TencentSearch tencentSearch = new TencentSearch(this);
SuggestionParam suggestionParam = new SuggestionParam(keyword, "北京");
//suggestion也提供了filter()方法和region方法
//具体说明见文档或者官网的webservice对应接口
tencentSearch.suggestion(suggestionParam, new HttpResponseListener<BaseObject>() {
@Override
public void onSuccess(int arg0, BaseObject arg1) {
if (arg1 == null ||
etSearch.getText().toString().trim().length() == 0) {
lvSuggesion.setVisibility(View.GONE);
return;
}
Message msg = new Message();
msg.what = MSG_SUGGESTION;
msg.obj = arg1;
handler.sendMessage(msg);
}
@Override
public void onFailure(int arg0, String arg1, Throwable arg2) {
//printResult(arg1);
}
});
}
class SuggestionAdapter extends BaseAdapter {
List<SuggestionResultObject.SuggestionData> mSuggestionDatas;
public SuggestionAdapter(List<SuggestionResultObject.SuggestionData> suggestionDatas) {
// TODO Auto-generated constructor stub
setDatas(suggestionDatas);
}
public void setDatas(List<SuggestionResultObject.SuggestionData> suggestionDatas) {
mSuggestionDatas = suggestionDatas;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mSuggestionDatas.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mSuggestionDatas.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder;
if (convertView == null) {
convertView = View.inflate(SearchBasicActivity.this,
R.layout.suggestion_list_item, null);
viewHolder = new ViewHolder();
viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.label);
viewHolder.tvAddress = (TextView) convertView.findViewById(R.id.desc);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tvTitle.setText(mSuggestionDatas.get(position).title);
viewHolder.tvAddress.setText(mSuggestionDatas.get(position).address);
return convertView;
}
private class ViewHolder{
TextView tvTitle;
TextView tvAddress;
}
}
// private EditText etSearch;
// private Button btnSearch;
// private ListView lvSuggesion;
// private SuggestionAdapter suggestionAdapter;
// private final int MSG_SUGGESTION = 10000;
// private final MyHandler handler = new MyHandler(this);
//
// private static class MyHandler extends Handler {
// private final WeakReference<SearchBasicActivity> mActivity;
//
// public MyHandler(SearchBasicActivity activity) {
// // TODO Auto-generated constructor stub
// mActivity = new WeakReference<>(activity);
// }
//
// @Override
// public void handleMessage(Message msg) {
// // TODO Auto-generated method stub
// SearchBasicActivity activity = mActivity.get();
// if (activity != null) {
// activity.handleMessage(msg);
// }
// }
// }
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// initView();
// }
//
// protected void initView(){
// etSearch = (EditText) findViewById(R.id.et_search_poi);
// btnSearch = (Button) findViewById(R.id.btn_search_poi);
// etSearch.setVisibility(View.VISIBLE);
// btnSearch.setVisibility(View.VISIBLE);
// lvSuggesion = (ListView) findViewById(R.id.lv_suggestions);
//
// etSearch.addTextChangedListener(textWatcher);
// etSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() {
//
// @Override
// public void onFocusChange(View v, boolean hasFocus) {
// // TODO Auto-generated method stub
// if (!etSearch.hasFocus()) {
// lvSuggesion.setVisibility(View.GONE);
// }
// }
// });
//
// lvSuggesion.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//
// @Override
// public void onItemClick(AdapterView<?> parent, View view,
// int position, long id) {
// // TODO Auto-generated method stub
// etSearch.removeTextChangedListener(textWatcher);
// CharSequence cs =
// ((TextView)view.findViewById(R.id.label)).getText();
// etSearch.setText(cs);
// lvSuggesion.setVisibility(View.GONE);
// etSearch.addTextChangedListener(textWatcher);
// }
// });
//
// btnSearch.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// searchPoi();
// }
// });
// }
//
// final TextWatcher textWatcher = new TextWatcher() {
//
// @Override
// public void onTextChanged(CharSequence s, int start, int before, int count) {
// // TODO Auto-generated method stub
// suggestion(s.toString());
// }
//
// @Override
// public void beforeTextChanged(CharSequence s, int start, int count,
// int after) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void afterTextChanged(Editable s) {
// // TODO Auto-generated method stub
//
// }
// };
//
//
//
// /**
// * poi检索
// */
// protected void searchPoi() {
// TencentSearch tencentSearch = new TencentSearch(this);
// String keyWord = etSearch.getText().toString().trim();
// //城市搜索
// SearchParam.Region region = new SearchParam.Region("北京").//设置搜索城市
// autoExtend(false);//设置搜索范围不扩大
// //圆形范围搜索
// LatLng latLng1 = new LatLng(39.984154, 116.307490);
// SearchParam.Nearby nearBy = new SearchParam.Nearby(latLng1, 1000);
// //矩形搜索这里的范围是故宫
// LatLng latLng2 = new LatLng(39.913127, 116.392164);
// LatLng latLng3 = new LatLng(39.923034, 116.402078);
// SearchParam.Rectangle rectangle = new SearchParam.Rectangle(latLng2, latLng3);
//
// //filter()方法可以设置过滤类别
// //search接口还提供了排序方式返回条目数返回页码具体用法见文档
// //同时也可以参考官网的webservice对应接口的说明
// SearchParam searchParam = new SearchParam(keyWord, region);//.pageIndex(0).pageSize(20).filter("大学,中学");
// tencentSearch.search(searchParam, new HttpResponseListener<BaseObject>() {
//
// @Override
// public void onFailure(int arg0, String arg2,
// Throwable arg3) {
// Toast.makeText(getApplicationContext(), arg2, Toast.LENGTH_LONG).show();
// }
//
// @Override
// public void onSuccess(int arg0, BaseObject arg1) {
// if (arg1 == null) {
// return;
// }
// SearchResultObject obj = (SearchResultObject) arg1;
// if(obj.data == null){
// return;
// }
// tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(obj.data.get(0).latLng,15f, 0, 0)));
// for(SearchResultObject.SearchResultData data : obj.data){
// Log.v("SearchDemo","title:"+data.title + ";" + data.address);
// tencentMap.addMarker(new MarkerOptions()
// .position(data.latLng) //标注的位置
// .title(data.title) //标注的InfoWindow的标题
// .snippet(data.address) //标注的InfoWindow的内容
// );
//
// }
// }
// });
// }
//
// public void handleMessage(Message msg) {
// switch (msg.what) {
// case MSG_SUGGESTION:
// showAutoComplete((SuggestionResultObject)msg.obj);
// break;
//
// default:
// break;
// }
// }
//
// /**
// * 显示完整ListView
// * @param obj
// */
// protected void showAutoComplete(SuggestionResultObject obj) {
// if (obj.data.size() == 0) {
// lvSuggesion.setVisibility(View.GONE);
// return;
// }
// if (suggestionAdapter == null) {
// suggestionAdapter = new SuggestionAdapter(obj.data);
// lvSuggesion.setAdapter(suggestionAdapter);
// } else {
// suggestionAdapter.setDatas(obj.data);
// suggestionAdapter.notifyDataSetChanged();
// }
// lvSuggesion.setVisibility(View.VISIBLE);
// }
// /**
// * 关键字提示
// * @param keyword
// */
// protected void suggestion(String keyword) {
// if (keyword.trim().length() == 0) {
// lvSuggesion.setVisibility(View.GONE);
// return;
// }
// TencentSearch tencentSearch = new TencentSearch(this);
// SuggestionParam suggestionParam = new SuggestionParam(keyword, "北京");
// //suggestion也提供了filter()方法和region方法
// //具体说明见文档或者官网的webservice对应接口
// tencentSearch.suggestion(suggestionParam, new HttpResponseListener<BaseObject>() {
//
// @Override
// public void onSuccess(int arg0, BaseObject arg1) {
// if (arg1 == null ||
// etSearch.getText().toString().trim().length() == 0) {
// lvSuggesion.setVisibility(View.GONE);
// return;
// }
//
// Message msg = new Message();
// msg.what = MSG_SUGGESTION;
// msg.obj = arg1;
// handler.sendMessage(msg);
// }
//
// @Override
// public void onFailure(int arg0, String arg1, Throwable arg2) {
// //printResult(arg1);
// }
// });
// }
//
// class SuggestionAdapter extends BaseAdapter {
//
// List<SuggestionResultObject.SuggestionData> mSuggestionDatas;
//
// public SuggestionAdapter(List<SuggestionResultObject.SuggestionData> suggestionDatas) {
// // TODO Auto-generated constructor stub
// setDatas(suggestionDatas);
// }
//
// public void setDatas(List<SuggestionResultObject.SuggestionData> suggestionDatas) {
// mSuggestionDatas = suggestionDatas;
// }
//
// @Override
// public int getCount() {
// // TODO Auto-generated method stub
// return mSuggestionDatas.size();
// }
//
// @Override
// public Object getItem(int position) {
// // TODO Auto-generated method stub
// return mSuggestionDatas.get(position);
// }
//
// @Override
// public long getItemId(int position) {
// // TODO Auto-generated method stub
// return position;
// }
//
// @Override
// public View getView(int position, View convertView, ViewGroup parent) {
// // TODO Auto-generated method stub
// ViewHolder viewHolder;
// if (convertView == null) {
// convertView = View.inflate(SearchBasicActivity.this,
// R.layout.suggestion_list_item, null);
// viewHolder = new ViewHolder();
// viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.label);
// viewHolder.tvAddress = (TextView) convertView.findViewById(R.id.desc);
// convertView.setTag(viewHolder);
// } else {
// viewHolder = (ViewHolder) convertView.getTag();
// }
// viewHolder.tvTitle.setText(mSuggestionDatas.get(position).title);
// viewHolder.tvAddress.setText(mSuggestionDatas.get(position).address);
// return convertView;
// }
//
// private class ViewHolder{
// TextView tvTitle;
// TextView tvAddress;
// }
// }
}

View File

@ -1,93 +1,93 @@
package cc.winboll.studio.positions.demo.search;
import android.os.Bundle;
import android.util.Log;
import com.tencent.lbssearch.TencentSearch;
import com.tencent.lbssearch.httpresponse.HttpResponseListener;
import com.tencent.lbssearch.object.param.TransitParam;
import com.tencent.lbssearch.object.result.TransitResultObject;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.util.List;
public class TransitRouteActivity extends SupportMapFragmentActivity {
private LatLng fromPoint = new LatLng(40.127265, 116.208051); // 起点坐标
private LatLng toPoint = new LatLng(40.040219, 116.273348); //终点坐标
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//移动地图
tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(40.080287, 116.244949),
12,
0f,
0f)));
getTransitRoute();
tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
Log.d("TAG", "onMapClick: "+latLng);
}
});
}
/**
* 获取公交路径规划
* TransitResultObject中的Segment是抽象类要转换成具体的子类才能获取数据
*/
private void getTransitRoute() {
TransitParam transitParam = new TransitParam(fromPoint, toPoint);
TencentSearch tencentSearch = new TencentSearch(this);
transitParam.policy(TransitParam.Policy.LEAST_WALKING, TransitParam.Preference.NO_SUBWAY);
tencentSearch.getRoutePlan(transitParam, new HttpResponseListener<TransitResultObject>() {
@Override
public void onSuccess(int i, TransitResultObject transitResultObject) {
if (transitResultObject == null) {
Log.i("TAG", "baseObject为空");
return;
}
showTransitRoute(transitResultObject);
}
@Override
public void onFailure(int i, String s, Throwable throwable) {
Log.d("TransitRouteActivity", "onFailure: " + s);
}
});
}
private void showTransitRoute(TransitResultObject transitResultObject) {
tencentMap.clearAllOverlays();
if (transitResultObject.result != null && transitResultObject.result.routes != null && transitResultObject.result.routes.size() > 0) {
for (int i = 0; i < transitResultObject.result.routes.size(); i++) {
TransitResultObject.Route route = transitResultObject.result.routes.get(i);
List<TransitResultObject.Segment> steps = route.steps;
for (int j = 0; j < steps.size(); j++) {
TransitResultObject.Segment segment = steps.get(j);
if (segment instanceof TransitResultObject.Transit) {
TransitResultObject.Transit transit = (TransitResultObject.Transit) segment;
tencentMap.addPolyline(new PolylineOptions().addAll(transit.lines.get(0).polyline).color(i + 1).width(20));
} else if (segment instanceof TransitResultObject.Walking) {
TransitResultObject.Walking walking = (TransitResultObject.Walking) segment;
tencentMap.addPolyline(new PolylineOptions().addAll(walking.polyline).color(j + 1).lineType(PolylineOptions.LineType.LINE_TYPE_IMAGEINARYLINE).width(20));
}
}
}
} else {
Log.i("TAG", "路线结果为空");
}
}
}
package cc.winboll.studio.positions.demo.search;
//import android.os.Bundle;
//import android.util.Log;
//
//import com.tencent.lbssearch.TencentSearch;
//import com.tencent.lbssearch.httpresponse.HttpResponseListener;
//import com.tencent.lbssearch.object.param.TransitParam;
//import com.tencent.lbssearch.object.result.TransitResultObject;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
//
//import java.util.List;
//
//public class TransitRouteActivity extends SupportMapFragmentActivity {
// private LatLng fromPoint = new LatLng(40.127265, 116.208051); // 起点坐标
// private LatLng toPoint = new LatLng(40.040219, 116.273348); //终点坐标
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// //移动地图
// tencentMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(40.080287, 116.244949),
// 12,
// 0f,
// 0f)));
// getTransitRoute();
// tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() {
// @Override
// public void onMapClick(LatLng latLng) {
// Log.d("TAG", "onMapClick: "+latLng);
// }
// });
// }
//
// /**
// * 获取公交路径规划
// * TransitResultObject中的Segment是抽象类要转换成具体的子类才能获取数据
// */
// private void getTransitRoute() {
// TransitParam transitParam = new TransitParam(fromPoint, toPoint);
// TencentSearch tencentSearch = new TencentSearch(this);
// transitParam.policy(TransitParam.Policy.LEAST_WALKING, TransitParam.Preference.NO_SUBWAY);
// tencentSearch.getRoutePlan(transitParam, new HttpResponseListener<TransitResultObject>() {
//
// @Override
// public void onSuccess(int i, TransitResultObject transitResultObject) {
// if (transitResultObject == null) {
// Log.i("TAG", "baseObject为空");
// return;
// }
// showTransitRoute(transitResultObject);
//
// }
//
// @Override
// public void onFailure(int i, String s, Throwable throwable) {
// Log.d("TransitRouteActivity", "onFailure: " + s);
// }
// });
// }
//
// private void showTransitRoute(TransitResultObject transitResultObject) {
// tencentMap.clearAllOverlays();
// if (transitResultObject.result != null && transitResultObject.result.routes != null && transitResultObject.result.routes.size() > 0) {
// for (int i = 0; i < transitResultObject.result.routes.size(); i++) {
// TransitResultObject.Route route = transitResultObject.result.routes.get(i);
//
// List<TransitResultObject.Segment> steps = route.steps;
// for (int j = 0; j < steps.size(); j++) {
// TransitResultObject.Segment segment = steps.get(j);
// if (segment instanceof TransitResultObject.Transit) {
// TransitResultObject.Transit transit = (TransitResultObject.Transit) segment;
// tencentMap.addPolyline(new PolylineOptions().addAll(transit.lines.get(0).polyline).color(i + 1).width(20));
//
// } else if (segment instanceof TransitResultObject.Walking) {
// TransitResultObject.Walking walking = (TransitResultObject.Walking) segment;
// tencentMap.addPolyline(new PolylineOptions().addAll(walking.polyline).color(j + 1).lineType(PolylineOptions.LineType.LINE_TYPE_IMAGEINARYLINE).width(20));
// }
//
// }
// }
//
// } else {
// Log.i("TAG", "路线结果为空");
// }
// }
//}

View File

@ -1,77 +1,77 @@
package cc.winboll.studio.positions.demo.search;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.tencent.lbssearch.TencentSearch;
import com.tencent.lbssearch.httpresponse.HttpResponseListener;
import com.tencent.lbssearch.object.param.TransitParam;
import com.tencent.lbssearch.object.param.TruckingParam;
import com.tencent.lbssearch.object.result.RoutePlanningObject;
import com.tencent.lbssearch.object.result.TransitResultObject;
import com.tencent.lbssearch.object.result.TruckingResultObject;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.util.List;
public class TruckingRouteActivity extends SupportMapFragmentActivity {
private LatLng fromPoint = new LatLng(40.127265, 116.208051); // 起点坐标
private LatLng toPoint = new LatLng(40.040219, 116.273348); //终点坐标
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(40.040219, 116.273348),
15,
0f,
0f));
//移动地图
tencentMap.moveCamera(cameraSigma);
geTruckingRoute();
}
private void geTruckingRoute() {
TruckingParam truckingParam = new TruckingParam();
truckingParam.from(fromPoint);
truckingParam.to(toPoint);
truckingParam.setMultRoute(1);
// truckingParam.setNoPolyline(1);
truckingParam.trafficSpeed(true);
TencentSearch tencentSearch = new TencentSearch(this);
tencentSearch.getRoutePlan(truckingParam, new HttpResponseListener<TruckingResultObject>() {
@Override
public void onSuccess(int i, TruckingResultObject truckingResultObject) {
if (null != truckingResultObject.result && null != truckingResultObject.result.routes && truckingResultObject.result.routes.size() > 0) {
for (int j = 0; j < truckingResultObject.result.routes.size(); j++) {
TruckingResultObject.Result result = truckingResultObject.result;
TruckingResultObject.Route route = result.routes.get(j);
// List<TruckingResultObject.Step> steps = route.steps;
tencentMap.addPolyline(new PolylineOptions().addAll(route.polyline).color(i + 1).width(20));
tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
.include(route.polyline).build(), 100));
}
}
}
@Override
public void onFailure(int i, String s, Throwable throwable) {
Log.d("TruckingRouteActivity", "onFailure: " + s);
}
});
}
}
package cc.winboll.studio.positions.demo.search;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.tencent.lbssearch.TencentSearch;
import com.tencent.lbssearch.httpresponse.HttpResponseListener;
import com.tencent.lbssearch.object.param.TransitParam;
import com.tencent.lbssearch.object.param.TruckingParam;
import com.tencent.lbssearch.object.result.RoutePlanningObject;
import com.tencent.lbssearch.object.result.TransitResultObject;
import com.tencent.lbssearch.object.result.TruckingResultObject;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import java.util.List;
public class TruckingRouteActivity extends SupportMapFragmentActivity {
// private LatLng fromPoint = new LatLng(40.127265, 116.208051); // 起点坐标
// private LatLng toPoint = new LatLng(40.040219, 116.273348); //终点坐标
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(40.040219, 116.273348),
// 15,
// 0f,
// 0f));
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// geTruckingRoute();
// }
//
// private void geTruckingRoute() {
// TruckingParam truckingParam = new TruckingParam();
// truckingParam.from(fromPoint);
// truckingParam.to(toPoint);
// truckingParam.setMultRoute(1);
// // truckingParam.setNoPolyline(1);
// truckingParam.trafficSpeed(true);
// TencentSearch tencentSearch = new TencentSearch(this);
// tencentSearch.getRoutePlan(truckingParam, new HttpResponseListener<TruckingResultObject>() {
//
// @Override
// public void onSuccess(int i, TruckingResultObject truckingResultObject) {
// if (null != truckingResultObject.result && null != truckingResultObject.result.routes && truckingResultObject.result.routes.size() > 0) {
// for (int j = 0; j < truckingResultObject.result.routes.size(); j++) {
// TruckingResultObject.Result result = truckingResultObject.result;
// TruckingResultObject.Route route = result.routes.get(j);
// // List<TruckingResultObject.Step> steps = route.steps;
// tencentMap.addPolyline(new PolylineOptions().addAll(route.polyline).color(i + 1).width(20));
// tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
// .include(route.polyline).build(), 100));
//
// }
// }
// }
//
// @Override
// public void onFailure(int i, String s, Throwable throwable) {
// Log.d("TruckingRouteActivity", "onFailure: " + s);
//
// }
// });
//
// }
}

View File

@ -17,60 +17,60 @@ import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
public class WalkingRouteActivity extends SupportMapFragmentActivity {
private LatLng fromPoint = new LatLng(40.040219, 116.273348); // 起点坐标
private LatLng toPoint = new LatLng(40.048055, 116.281166); //终点坐标
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWalkingRoute();
}
/**
* 获取步行路线规划
*/
private void getWalkingRoute() {
WalkingParam walkingParam = new WalkingParam();
walkingParam.from(fromPoint);
walkingParam.to(toPoint);
TencentSearch tencentSearch = new TencentSearch(getApplicationContext());
Log.i("TAG", "checkParams:" + walkingParam.checkParams());
tencentSearch.getRoutePlan(walkingParam, new HttpResponseListener<WalkingResultObject>() {
@Override
public void onSuccess(int statusCode, WalkingResultObject object) {
if (object == null) {
Log.i("TAG", "baseObject为空");
return;
}
showWalkingRoute(object);
Log.i("TAG", "message:" + object.message);
}
@Override
public void onFailure(int statusCode, String responseString, Throwable throwable) {
Log.i("TAG:", statusCode + " " + responseString);
}
});
}
private void showWalkingRoute(WalkingResultObject object) {
tencentMap.clearAllOverlays();
if (object.result != null && object.result.routes != null && object.result.routes.size() > 0) {
for (int i = 0; i < object.result.routes.size(); i++) {
WalkingResultObject.Route result = object.result.routes.get(i);
tencentMap.addPolyline(new PolylineOptions().addAll(result.polyline).color(i + 1).width(20));
Log.i("TAG", "distance:" + result.distance + " duration:" + result.duration
+ " mode:" + result.mode + " direction:" + result.direction);
for (RoutePlanningObject.Step step : result.steps) {
Log.i("TAG", "step:" + step.road_name + " " + step.distance + " "
+ step.instruction + " " + step.act_desc + " " + step.dir_desc);
}
tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
.include(result.polyline).build(), 100));
}
} else {
Log.i("TAG", "路线结果为空");
}
}
// private LatLng fromPoint = new LatLng(40.040219, 116.273348); // 起点坐标
// private LatLng toPoint = new LatLng(40.048055, 116.281166); //终点坐标
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// getWalkingRoute();
// }
//
// /**
// * 获取步行路线规划
// */
// private void getWalkingRoute() {
// WalkingParam walkingParam = new WalkingParam();
// walkingParam.from(fromPoint);
// walkingParam.to(toPoint);
// TencentSearch tencentSearch = new TencentSearch(getApplicationContext());
// Log.i("TAG", "checkParams:" + walkingParam.checkParams());
// tencentSearch.getRoutePlan(walkingParam, new HttpResponseListener<WalkingResultObject>() {
// @Override
// public void onSuccess(int statusCode, WalkingResultObject object) {
// if (object == null) {
// Log.i("TAG", "baseObject为空");
// return;
// }
// showWalkingRoute(object);
// Log.i("TAG", "message:" + object.message);
// }
//
// @Override
// public void onFailure(int statusCode, String responseString, Throwable throwable) {
// Log.i("TAG:", statusCode + " " + responseString);
// }
// });
// }
//
// private void showWalkingRoute(WalkingResultObject object) {
// tencentMap.clearAllOverlays();
// if (object.result != null && object.result.routes != null && object.result.routes.size() > 0) {
// for (int i = 0; i < object.result.routes.size(); i++) {
// WalkingResultObject.Route result = object.result.routes.get(i);
// tencentMap.addPolyline(new PolylineOptions().addAll(result.polyline).color(i + 1).width(20));
// Log.i("TAG", "distance:" + result.distance + " duration:" + result.duration
// + " mode:" + result.mode + " direction:" + result.direction);
// for (RoutePlanningObject.Step step : result.steps) {
// Log.i("TAG", "step:" + step.road_name + " " + step.distance + " "
// + step.instruction + " " + step.act_desc + " " + step.dir_desc);
// }
// tencentMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder()
// .include(result.polyline).build(), 100));
// }
//
// } else {
// Log.i("TAG", "路线结果为空");
// }
// }
}

View File

@ -1,251 +1,257 @@
package cc.winboll.studio.positions.demo.smooth;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.Marker;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import com.tencent.tencentmap.mapsdk.vector.utils.animation.MarkerTranslateAnimator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import static com.tencent.tencentmap.mapsdk.vector.utils.animation.MarkerTranslateAnimator.MarkerTranslateStatusListener.AnimationStatus.AnimationComplete;
public class SmoothMoveActivity extends AppCompatActivity implements View.OnClickListener {
private MapView mapView;
private final String mLine = "39.98409,116.30804,39.98409,116.3081,39.98409,116.3081,39.98397,116.30809,39.9823,116.30809,39.9811,116.30817,39.9811,116.30817,39.97918,116.308266,39.97918,116.308266,39.9791,116.30827,39.9791,116.30827,39.979008,116.3083,39.978756,116.3084,39.978386,116.3086,39.977867,116.30884,39.977547,116.308914,39.976845,116.308914,39.975826,116.308945,39.975826,116.308945,39.975666,116.30901,39.975716,116.310486,39.975716,116.310486,39.975754,116.31129,39.975754,116.31129,39.975784,116.31241,39.975822,116.31327,39.97581,116.31352,39.97588,116.31591,39.97588,116.31591,39.97591,116.31735,39.97591,116.31735,39.97593,116.31815,39.975967,116.31879,39.975986,116.32034,39.976055,116.32211,39.976086,116.323395,39.976105,116.32514,39.976173,116.32631,39.976254,116.32811,39.976265,116.3288,39.976345,116.33123,39.976357,116.33198,39.976418,116.33346,39.976418,116.33346,39.97653,116.333755,39.97653,116.333755,39.978157,116.333664,39.978157,116.333664,39.978195,116.33509,39.978195,116.33509,39.978226,116.33625,39.978226,116.33625,39.97823,116.33656,39.97823,116.33656,39.978256,116.33791,39.978256,116.33791,39.978016,116.33789,39.977047,116.33791,39.977047,116.33791,39.97706,116.33768,39.97706,116.33768,39.976967,116.33706,39.976967,116.33697";
private TencentMap map;
private Polyline mPolyline;
private Marker mCarMarker;
private LatLng[] mCarLatLngArray;
private MarkerTranslateAnimator mAnimator;
private Polyline polyline;
private ArrayList<Float> skews;
private ArrayList<Float> roates;
private String parentPath;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_smooth_move);
mapView = findViewById(R.id.map);
map = mapView.getMap();
//解析路线
init();
Button btLin = findViewById(R.id.button_set);
Button btStart = findViewById(R.id.satrt);
Button btStop = findViewById(R.id.stop);
btLin.setOnClickListener(this);
btStart.setOnClickListener(this);
btStop.setOnClickListener(this);
}
private void init() {
String[] linePointsStr = mLine.split(",");
mCarLatLngArray = new LatLng[linePointsStr.length / 4];
skews = new ArrayList<>();
roates = new ArrayList<>();
for (int i = 0; i < mCarLatLngArray.length; i++) {
double latitude = Double.parseDouble(linePointsStr[i * 4]);
double longitude = Double.parseDouble(linePointsStr[i * 4 + 1]);
// float skew = Float.parseFloat(linePointsStr[i * 4 + 2]);
// float roate = Float.parseFloat(linePointsStr[i * 4 + 3]);
mCarLatLngArray[i] = new LatLng(latitude, longitude);
// skews.add(skew);
// roates.add(roate);
}
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onRestart() {
super.onRestart();
mapView.onRestart();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_set:
if (polyline == null && mCarMarker == null) {
//添加小车路线
polyline = map.addPolyline(new PolylineOptions().add(mCarLatLngArray).color(R.color.colorPrimaryDark));
LatLng carLatLng = mCarLatLngArray[0];
mCarMarker = map.addMarker(
new MarkerOptions(carLatLng)
.anchor(0.5f, 0.5f)
.title("即将到达终点")
.icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.taxi)))
.flat(true)
.clockwise(false));
//调整最佳视界
map.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), 50));
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
if (polyline != null) {
snapshot();
}
}
};
Timer timer = new Timer();
timer.schedule(timerTask, 800);
}
break;
case R.id.satrt:
if (mAnimator == null) {
//创建移动动画
mAnimator = new MarkerTranslateAnimator(mCarMarker, 100 * 1000, mCarLatLngArray, true, new MarkerTranslateAnimator.MarkerTranslateStatusListener() {
private CameraUpdate cameraSigma;
@Override
public void onInterpolatePoint(LatLng latLng, int i, AnimationStatus animationStatus) {
//路线擦出
polyline.setEraseable(true);
polyline.eraseTo(i, latLng);
/* CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBoundsWithMapCenter(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), latLng, 10);
map.animateCamera(cameraUpdate);*/
if (mCarMarker.getRotation() < 90 && mCarMarker.getRotation() > 0) {
cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
latLng,
18,
60,
mCarMarker.getRotation() + 180));
} else if (mCarMarker.getRotation() >= 90 && mCarMarker.getRotation() <= 180) {
cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
latLng,
18,
60,
-mCarMarker.getRotation()));
} else {
cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
latLng,
18,
60,
-mCarMarker.getRotation()));
}
//移动地图
map.moveCamera(cameraSigma);
map.enableMultipleInfowindow(true);
if (i == 41) {
mCarMarker.startAnimation();
mCarMarker.showInfoWindow();
}
if (animationStatus == AnimationComplete) {
mCarMarker.setTitle("到达目的地");
}
}
});
//开启动画
mAnimator.startAnimation();
}
break;
case R.id.stop:
if (mAnimator != null && polyline != null && mCarMarker != null) {
mAnimator.endAnimation();
//mAnimator.cancelAnimation();
polyline.remove();
polyline = null;
mCarMarker.remove();
mCarMarker = null;
mAnimator = null;
}
break;
default:
throw new IllegalStateException("Unexpected value: " + v.getId());
}
}
private void snapshot() {
imageView = findViewById(R.id.iv);
map.snapshot(new TencentMap.SnapshotReadyCallback() {
@Override
public void onSnapshotReady(Bitmap bitmap) {
RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
roundedBitmapDrawable.setCircular(true);
imageView.setImageDrawable(roundedBitmapDrawable);
}
}, Bitmap.Config.ARGB_8888);
}
//设置图片
private Bitmap getBitMap(int resourceId) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 100;
int newHeight = 150;
float widthScale = ((float) newWidth) / width;
float heightScale = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return bitmap;
}
}
package cc.winboll.studio.positions.demo.smooth;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import cc.winboll.studio.positions.R;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds;
import com.tencent.tencentmap.mapsdk.maps.model.Marker;
import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions;
import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
import com.tencent.tencentmap.mapsdk.vector.utils.animation.MarkerTranslateAnimator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import static com.tencent.tencentmap.mapsdk.vector.utils.animation.MarkerTranslateAnimator.MarkerTranslateStatusListener.AnimationStatus.AnimationComplete;
public class SmoothMoveActivity extends AppCompatActivity implements View.OnClickListener {
@Override
public void onClick(View p1)
{
}
// private MapView mapView;
// private final String mLine = "39.98409,116.30804,39.98409,116.3081,39.98409,116.3081,39.98397,116.30809,39.9823,116.30809,39.9811,116.30817,39.9811,116.30817,39.97918,116.308266,39.97918,116.308266,39.9791,116.30827,39.9791,116.30827,39.979008,116.3083,39.978756,116.3084,39.978386,116.3086,39.977867,116.30884,39.977547,116.308914,39.976845,116.308914,39.975826,116.308945,39.975826,116.308945,39.975666,116.30901,39.975716,116.310486,39.975716,116.310486,39.975754,116.31129,39.975754,116.31129,39.975784,116.31241,39.975822,116.31327,39.97581,116.31352,39.97588,116.31591,39.97588,116.31591,39.97591,116.31735,39.97591,116.31735,39.97593,116.31815,39.975967,116.31879,39.975986,116.32034,39.976055,116.32211,39.976086,116.323395,39.976105,116.32514,39.976173,116.32631,39.976254,116.32811,39.976265,116.3288,39.976345,116.33123,39.976357,116.33198,39.976418,116.33346,39.976418,116.33346,39.97653,116.333755,39.97653,116.333755,39.978157,116.333664,39.978157,116.333664,39.978195,116.33509,39.978195,116.33509,39.978226,116.33625,39.978226,116.33625,39.97823,116.33656,39.97823,116.33656,39.978256,116.33791,39.978256,116.33791,39.978016,116.33789,39.977047,116.33791,39.977047,116.33791,39.97706,116.33768,39.97706,116.33768,39.976967,116.33706,39.976967,116.33697";
// private TencentMap map;
// private Polyline mPolyline;
// private Marker mCarMarker;
// private LatLng[] mCarLatLngArray;
// private MarkerTranslateAnimator mAnimator;
// private Polyline polyline;
// private ArrayList<Float> skews;
// private ArrayList<Float> roates;
// private String parentPath;
// private ImageView imageView;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_smooth_move);
// mapView = findViewById(R.id.map);
// map = mapView.getMap();
// //解析路线
// init();
// Button btLin = findViewById(R.id.button_set);
// Button btStart = findViewById(R.id.satrt);
// Button btStop = findViewById(R.id.stop);
// btLin.setOnClickListener(this);
// btStart.setOnClickListener(this);
// btStop.setOnClickListener(this);
// }
//
// private void init() {
// String[] linePointsStr = mLine.split(",");
// mCarLatLngArray = new LatLng[linePointsStr.length / 4];
// skews = new ArrayList<>();
// roates = new ArrayList<>();
//
// for (int i = 0; i < mCarLatLngArray.length; i++) {
// double latitude = Double.parseDouble(linePointsStr[i * 4]);
// double longitude = Double.parseDouble(linePointsStr[i * 4 + 1]);
// // float skew = Float.parseFloat(linePointsStr[i * 4 + 2]);
// // float roate = Float.parseFloat(linePointsStr[i * 4 + 3]);
// mCarLatLngArray[i] = new LatLng(latitude, longitude);
// // skews.add(skew);
// // roates.add(roate);
// }
// }
//
// @Override
// protected void onStart() {
// super.onStart();
// mapView.onStart();
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// mapView.onResume();
// }
//
// @Override
// protected void onPause() {
// super.onPause();
// mapView.onPause();
// }
//
// @Override
// protected void onStop() {
// super.onStop();
// mapView.onStop();
// }
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// mapView.onDestroy();
// }
//
// @Override
// protected void onRestart() {
// super.onRestart();
// mapView.onRestart();
// }
//
// @Override
// public void onClick(View v) {
// switch (v.getId()) {
// case R.id.button_set:
// if (polyline == null && mCarMarker == null) {
// //添加小车路线
// polyline = map.addPolyline(new PolylineOptions().add(mCarLatLngArray).color(R.color.colorPrimaryDark));
// LatLng carLatLng = mCarLatLngArray[0];
// mCarMarker = map.addMarker(
// new MarkerOptions(carLatLng)
// .anchor(0.5f, 0.5f)
// .title("即将到达终点")
// .icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.taxi)))
// .flat(true)
// .clockwise(false));
// //调整最佳视界
// map.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), 50));
// TimerTask timerTask = new TimerTask() {
// @Override
// public void run() {
// if (polyline != null) {
// snapshot();
// }
//
// }
// };
// Timer timer = new Timer();
// timer.schedule(timerTask, 800);
// }
// break;
// case R.id.satrt:
// if (mAnimator == null) {
// //创建移动动画
// mAnimator = new MarkerTranslateAnimator(mCarMarker, 100 * 1000, mCarLatLngArray, true, new MarkerTranslateAnimator.MarkerTranslateStatusListener() {
// private CameraUpdate cameraSigma;
//
// @Override
// public void onInterpolatePoint(LatLng latLng, int i, AnimationStatus animationStatus) {
// //路线擦出
// polyline.setEraseable(true);
// polyline.eraseTo(i, latLng);
//
// /* CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBoundsWithMapCenter(LatLngBounds.builder().include(Arrays.asList(mCarLatLngArray)).build(), latLng, 10);
// map.animateCamera(cameraUpdate);*/
// if (mCarMarker.getRotation() < 90 && mCarMarker.getRotation() > 0) {
// cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// latLng,
// 18,
// 60,
// mCarMarker.getRotation() + 180));
// } else if (mCarMarker.getRotation() >= 90 && mCarMarker.getRotation() <= 180) {
// cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// latLng,
// 18,
// 60,
// -mCarMarker.getRotation()));
// } else {
// cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// latLng,
// 18,
// 60,
// -mCarMarker.getRotation()));
// }
//
// //移动地图
// map.moveCamera(cameraSigma);
// map.enableMultipleInfowindow(true);
// if (i == 41) {
// mCarMarker.startAnimation();
// mCarMarker.showInfoWindow();
// }
// if (animationStatus == AnimationComplete) {
// mCarMarker.setTitle("到达目的地");
// }
// }
// });
//
//
// //开启动画
// mAnimator.startAnimation();
// }
// break;
// case R.id.stop:
// if (mAnimator != null && polyline != null && mCarMarker != null) {
// mAnimator.endAnimation();
// //mAnimator.cancelAnimation();
// polyline.remove();
// polyline = null;
// mCarMarker.remove();
// mCarMarker = null;
// mAnimator = null;
// }
//
//
// break;
// default:
// throw new IllegalStateException("Unexpected value: " + v.getId());
// }
// }
//
// private void snapshot() {
// imageView = findViewById(R.id.iv);
//
// map.snapshot(new TencentMap.SnapshotReadyCallback() {
// @Override
// public void onSnapshotReady(Bitmap bitmap) {
// RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
// roundedBitmapDrawable.setCircular(true);
// imageView.setImageDrawable(roundedBitmapDrawable);
// }
// }, Bitmap.Config.ARGB_8888);
// }
//
// //设置图片
// private Bitmap getBitMap(int resourceId) {
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 100;
// int newHeight = 150;
// float widthScale = ((float) newWidth) / width;
// float heightScale = ((float) newHeight) / height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
// return bitmap;
// }
}

View File

@ -13,49 +13,54 @@ import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class AnimateCameraActivity extends SupportMapFragmentActivity implements View.OnClickListener {
private Button btn;
private boolean flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btn = findViewById(R.id.btn_bottom);
btn.setVisibility(View.VISIBLE);
btn.setText("以动画的方式改变地图视图");
btn.setOnClickListener(this);
flag = true;
}
/**
* 改变地图视图
* @param v
*/
@Override
public void onClick(View v) {
if(flag){
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.977290,116.337000), //新的中心点坐标
19, //新的缩放级别
40f, //俯仰角 0~45° (垂直地图时为0)
45f)); //偏航角 0~360° (正北方为0)
//移动地图
tencentMap.animateCamera(cameraSigma);
flag = !flag;
}else {
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.877290,116.437000), //新的中心点坐标
18, //新的缩放级别
0f, //俯仰角 0~45° (垂直地图时为0)
0f)); //偏航角 0~360° (正北方为0)
//移动地图
tencentMap.animateCamera(cameraSigma);
flag = !flag;
}
public void onClick(View p1) {
}
// private Button btn;
// private boolean flag;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
//
// btn = findViewById(R.id.btn_bottom);
// btn.setVisibility(View.VISIBLE);
// btn.setText("以动画的方式改变地图视图");
// btn.setOnClickListener(this);
//
// flag = true;
// }
//
// /**
// * 改变地图视图
// * @param v
// */
// @Override
// public void onClick(View v) {
// if(flag){
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.977290,116.337000), //新的中心点坐标
// 19, //新的缩放级别
// 40f, //俯仰角 0~45° (垂直地图时为0)
// 45f)); //偏航角 0~360° (正北方为0)
// //移动地图
// tencentMap.animateCamera(cameraSigma);
// flag = !flag;
// }else {
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.877290,116.437000), //新的中心点坐标
// 18, //新的缩放级别
// 0f, //俯仰角 0~45° (垂直地图时为0)
// 0f)); //偏航角 0~360° (正北方为0)
// //移动地图
// tencentMap.animateCamera(cameraSigma);
// flag = !flag;
// }
//
// }
//
}

View File

@ -13,49 +13,54 @@ import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class MoveCameraActivity extends SupportMapFragmentActivity implements View.OnClickListener {
private Button btn;
private boolean flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btn = findViewById(R.id.btn_bottom);
btn.setVisibility(View.VISIBLE);
btn.setText("以移动的方式改变地图视图");
btn.setOnClickListener(this);
flag = true;
public void onClick(View p1) {
}
/**
* 改变地图视图
* @param v
*/
@Override
public void onClick(View v) {
if(flag){
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.977290,116.337000), //新的中心点坐标
19, //新的缩放级别
40f, //俯仰角 0~45° (垂直地图时为0)
45f)); //偏航角 0~360° (正北方为0)
//移动地图
tencentMap.moveCamera(cameraSigma);
flag = !flag;
}else {
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.877290,116.437000), //新的中心点坐标
18, //新的缩放级别
0f, //俯仰角 0~45° (垂直地图时为0)
0f)); //偏航角 0~360° (正北方为0)
//移动地图
tencentMap.moveCamera(cameraSigma);
flag = !flag;
}
}
// private Button btn;
// private boolean flag;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
//
// btn = findViewById(R.id.btn_bottom);
// btn.setVisibility(View.VISIBLE);
// btn.setText("以移动的方式改变地图视图");
// btn.setOnClickListener(this);
//
// flag = true;
// }
//
// /**
// * 改变地图视图
// * @param v
// */
// @Override
// public void onClick(View v) {
// if(flag){
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.977290,116.337000), //新的中心点坐标
// 19, //新的缩放级别
// 40f, //俯仰角 0~45° (垂直地图时为0)
// 45f)); //偏航角 0~360° (正北方为0)
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// flag = !flag;
// }else {
// CameraUpdate cameraSigma =
// CameraUpdateFactory.newCameraPosition(new CameraPosition(
// new LatLng(39.877290,116.437000), //新的中心点坐标
// 18, //新的缩放级别
// 0f, //俯仰角 0~45° (垂直地图时为0)
// 0f)); //偏航角 0~360° (正北方为0)
// //移动地图
// tencentMap.moveCamera(cameraSigma);
// flag = !flag;
// }
//
// }
}

View File

@ -1,28 +1,28 @@
package cc.winboll.studio.positions.demo.transaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
public class RotateMapActivity extends SupportMapFragmentActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btn = findViewById(R.id.btn_bottom);
btn.setVisibility(View.VISIBLE);
btn.setText("旋转地图");
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CameraUpdate cameraUpdate = CameraUpdateFactory.rotateTo(90f,1.5f);
tencentMap.animateCamera(cameraUpdate);
}
});
}
}
//import android.os.Bundle;
//import android.view.View;
//import android.widget.Button;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//
//public class RotateMapActivity extends SupportMapFragmentActivity {
// private Button btn;
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// btn = findViewById(R.id.btn_bottom);
// btn.setVisibility(View.VISIBLE);
// btn.setText("旋转地图");
// btn.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// CameraUpdate cameraUpdate = CameraUpdateFactory.rotateTo(90f,1.5f);
// tencentMap.animateCamera(cameraUpdate);
// }
// });
// }
//}

View File

@ -13,70 +13,75 @@ import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
public class ScollMapActivity extends SupportMapFragmentActivity implements View.OnClickListener {
private static final int SCROLL_BY_PX = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout linearLayout = findViewById(R.id.ll);
linearLayout.setVisibility(View.VISIBLE);
Button scrollLeft = (Button) findViewById(R.id.scroll_left);
scrollLeft.setOnClickListener(this);
Button scrollRight = (Button) findViewById(R.id.scroll_right);
scrollRight.setOnClickListener(this);
Button scrollUp = (Button) findViewById(R.id.scroll_up);
scrollUp.setOnClickListener(this);
Button scrollDown = (Button) findViewById(R.id.scroll_down);
scrollDown.setOnClickListener(this);
/* btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CameraUpdate cameraUpdate = CameraUpdateFactory.scrollBy(50f,50f);
tencentMap.animateCamera(cameraUpdate);
}
});*/
}
// 根据动画按钮状态调用函数animateCamera或moveCamera来改变可视区域
private void changeCamera(CameraUpdate update, TencentMap.CancelableCallback callback) {
boolean animated = ((CompoundButton) findViewById(R.id.animate))
.isChecked();
if (animated) {
tencentMap.animateCamera(update, 1000, callback);
} else {
tencentMap.moveCamera(update);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
//点击向左移动按钮响应事件camera将向左边移动
case R.id.scroll_left:
changeCamera(CameraUpdateFactory.scrollBy(-SCROLL_BY_PX, 0), null);
break;
// 点击向右移动按钮响应事件camera将向右边移动
case R.id.scroll_right:
changeCamera(CameraUpdateFactory.scrollBy(SCROLL_BY_PX, 0), null);
break;
// 点击向上移动按钮响应事件camera将向上边移动
case R.id.scroll_up:
changeCamera(CameraUpdateFactory.scrollBy(0, -SCROLL_BY_PX), null);
break;
// 点击向下移动按钮响应事件camera将向下边移动
case R.id.scroll_down:
changeCamera(CameraUpdateFactory.scrollBy(0, SCROLL_BY_PX), null);
break;
default:
break;
}
public void onClick(View p1) {
}
// private static final int SCROLL_BY_PX = 100;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// LinearLayout linearLayout = findViewById(R.id.ll);
// linearLayout.setVisibility(View.VISIBLE);
// Button scrollLeft = (Button) findViewById(R.id.scroll_left);
// scrollLeft.setOnClickListener(this);
//
// Button scrollRight = (Button) findViewById(R.id.scroll_right);
// scrollRight.setOnClickListener(this);
//
// Button scrollUp = (Button) findViewById(R.id.scroll_up);
// scrollUp.setOnClickListener(this);
//
// Button scrollDown = (Button) findViewById(R.id.scroll_down);
// scrollDown.setOnClickListener(this);
//
// /* btn.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// CameraUpdate cameraUpdate = CameraUpdateFactory.scrollBy(50f,50f);
// tencentMap.animateCamera(cameraUpdate);
// }
// });*/
// }
//
//
// // 根据动画按钮状态调用函数animateCamera或moveCamera来改变可视区域
//
// private void changeCamera(CameraUpdate update, TencentMap.CancelableCallback callback) {
// boolean animated = ((CompoundButton) findViewById(R.id.animate))
// .isChecked();
// if (animated) {
// tencentMap.animateCamera(update, 1000, callback);
// } else {
// tencentMap.moveCamera(update);
// }
// }
//
// @Override
// public void onClick(View v) {
// switch (v.getId()) {
// //点击向左移动按钮响应事件camera将向左边移动
//
// case R.id.scroll_left:
// changeCamera(CameraUpdateFactory.scrollBy(-SCROLL_BY_PX, 0), null);
// break;
// // 点击向右移动按钮响应事件camera将向右边移动
// case R.id.scroll_right:
// changeCamera(CameraUpdateFactory.scrollBy(SCROLL_BY_PX, 0), null);
// break;
// // 点击向上移动按钮响应事件camera将向上边移动
// case R.id.scroll_up:
// changeCamera(CameraUpdateFactory.scrollBy(0, -SCROLL_BY_PX), null);
// break;
// // 点击向下移动按钮响应事件camera将向下边移动
// case R.id.scroll_down:
// changeCamera(CameraUpdateFactory.scrollBy(0, SCROLL_BY_PX), null);
// break;
//
// default:
// break;
// }
// }
}

View File

@ -20,54 +20,54 @@ import java.util.ArrayList;
public class ZoomCalulateActivity extends SupportMapFragmentActivity {
private Button btn;
private int leftpadding = 50,rightpadding =50, toppadding = 50, bottompadding=50;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btn = findViewById(R.id.btn_bottom);
btn.setVisibility(View.VISIBLE);
btn.setText("根据点集缩放地图");
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(addMarker());
tencentMap.moveCamera(cameraUpdate);
}
});
}
private CameraPosition addMarker(){
ArrayList<LatLng> points = new ArrayList<>();
points.add(new LatLng(39.984059,116.307621));
points.add(new LatLng(39.984049,116.307631));
// points.add(new LatLng(39.981527,116.308994));
// points.add(new LatLng(39.984026,116.316419));
// points.add(new LatLng(39.978501,116.311827));
//根据markers计算缩放级别
for(int i=0; i<points.size();i++){
MarkerOptions markerOptions = new MarkerOptions().position(points.get(i)).icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)));
tencentMap.addMarker(markerOptions);
}
CameraPosition cameraPosition = tencentMap.calculateZoomToSpanLevel(null,points,leftpadding,rightpadding,toppadding,bottompadding);
return cameraPosition;
}
private Bitmap getBitMap(int resourceId){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 50;
int newHeight = 50;
float widthScale = ((float)newWidth)/width;
float heightScale = ((float)newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
return bitmap;
}
// private Button btn;
// private int leftpadding = 50,rightpadding =50, toppadding = 50, bottompadding=50;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// btn = findViewById(R.id.btn_bottom);
// btn.setVisibility(View.VISIBLE);
// btn.setText("根据点集缩放地图");
// btn.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(addMarker());
// tencentMap.moveCamera(cameraUpdate);
// }
// });
// }
//
//
// private CameraPosition addMarker(){
// ArrayList<LatLng> points = new ArrayList<>();
// points.add(new LatLng(39.984059,116.307621));
// points.add(new LatLng(39.984049,116.307631));
//// points.add(new LatLng(39.981527,116.308994));
//// points.add(new LatLng(39.984026,116.316419));
//// points.add(new LatLng(39.978501,116.311827));
// //根据markers计算缩放级别
// for(int i=0; i<points.size();i++){
// MarkerOptions markerOptions = new MarkerOptions().position(points.get(i)).icon(BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker)));
// tencentMap.addMarker(markerOptions);
// }
//
//
// CameraPosition cameraPosition = tencentMap.calculateZoomToSpanLevel(null,points,leftpadding,rightpadding,toppadding,bottompadding);
// return cameraPosition;
// }
//
// private Bitmap getBitMap(int resourceId){
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// int width = bitmap.getWidth();
// int height = bitmap.getHeight();
// int newWidth = 50;
// int newHeight = 50;
// float widthScale = ((float)newWidth)/width;
// float heightScale = ((float)newHeight)/height;
// Matrix matrix = new Matrix();
// matrix.postScale(widthScale, heightScale);
// bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
// return bitmap;
// }
}

View File

@ -1,47 +1,47 @@
package cc.winboll.studio.positions.demo.transaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
public class ZoomMapActivity extends SupportMapFragmentActivity implements View.OnClickListener{
private Button btn,zoomin,zoomout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btn = findViewById(R.id.btn_bottom);
zoomin = findViewById(R.id.btn_zoomin);
zoomout = findViewById(R.id.btn_zoomout);
btn.setOnClickListener(this);
zoomout.setOnClickListener(this);
zoomin.setOnClickListener(this);
btn.setVisibility(View.VISIBLE);
btn.setText("缩放至17级");
zoomin.setVisibility(View.VISIBLE);
zoomout.setVisibility(View.VISIBLE);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_bottom:
CameraUpdate cameraUpdate = CameraUpdateFactory.zoomTo(17f);
tencentMap.animateCamera(cameraUpdate);
break;
case R.id.btn_zoomin:
CameraUpdate cameraUpdate1 = CameraUpdateFactory.zoomIn();
tencentMap.animateCamera(cameraUpdate1);
break;
case R.id.btn_zoomout:
CameraUpdate cameraUpdate2 = CameraUpdateFactory.zoomOut();
tencentMap.animateCamera(cameraUpdate2);
break;
}
}
}
//import android.os.Bundle;
//import android.view.View;
//import android.widget.Button;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//
//public class ZoomMapActivity extends SupportMapFragmentActivity implements View.OnClickListener{
//
// private Button btn,zoomin,zoomout;
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// btn = findViewById(R.id.btn_bottom);
// zoomin = findViewById(R.id.btn_zoomin);
// zoomout = findViewById(R.id.btn_zoomout);
// btn.setOnClickListener(this);
// zoomout.setOnClickListener(this);
// zoomin.setOnClickListener(this);
// btn.setVisibility(View.VISIBLE);
// btn.setText("缩放至17级");
// zoomin.setVisibility(View.VISIBLE);
// zoomout.setVisibility(View.VISIBLE);
// }
//
// @Override
// public void onClick(View v) {
// switch (v.getId()){
// case R.id.btn_bottom:
// CameraUpdate cameraUpdate = CameraUpdateFactory.zoomTo(17f);
// tencentMap.animateCamera(cameraUpdate);
// break;
// case R.id.btn_zoomin:
// CameraUpdate cameraUpdate1 = CameraUpdateFactory.zoomIn();
// tencentMap.animateCamera(cameraUpdate1);
// break;
// case R.id.btn_zoomout:
// CameraUpdate cameraUpdate2 = CameraUpdateFactory.zoomOut();
// tencentMap.animateCamera(cameraUpdate2);
// break;
// }
// }
//}

View File

@ -15,43 +15,43 @@ import com.tencent.tencentmap.mapsdk.maps.TencentMap.OnMapLongClickListener;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
import com.tencent.tencentmap.mapsdk.maps.model.VisibleRegion;
public class CoordinateActivity extends SupportMapFragmentActivity implements OnMapLongClickListener, TencentMap.OnMapClickListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = findViewById(R.id.tv_info);
textView.setVisibility(View.VISIBLE);
tencentMap.setOnMapClickListener(this);
tencentMap.setOnMapLongClickListener(this);
}
/**
* 点击地图显示对应点击点的屏幕坐标
*
* @param latLng
*/
@Override
public void onMapLongClick(LatLng latLng) {
Projection projection = tencentMap.getProjection();
Point screen = projection.toScreenLocation(latLng);
LatLng transferLatLng = projection.fromScreenLocation(screen);
textView.setText("屏幕坐标:" + new Gson().toJson(screen));
Toast.makeText(this, new Gson().toJson(transferLatLng), Toast.LENGTH_SHORT).show();
}
/**
* 长点击地图 显示当前地图的坐标范围
*
* @param latLng
*/
@Override
public void onMapClick(LatLng latLng) {
Projection projection = tencentMap.getProjection();
VisibleRegion region = projection.getVisibleRegion();
textView.setText("当前地图视野的经纬度:" + new Gson().toJson(region));
Toast.makeText(this, new Gson().toJson(region), Toast.LENGTH_LONG).show();
}
}
//public class CoordinateActivity extends SupportMapFragmentActivity implements OnMapLongClickListener, TencentMap.OnMapClickListener {
// private TextView textView;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// textView = findViewById(R.id.tv_info);
// textView.setVisibility(View.VISIBLE);
// tencentMap.setOnMapClickListener(this);
// tencentMap.setOnMapLongClickListener(this);
// }
//
// /**
// * 点击地图显示对应点击点的屏幕坐标
// *
// * @param latLng
// */
// @Override
// public void onMapLongClick(LatLng latLng) {
// Projection projection = tencentMap.getProjection();
// Point screen = projection.toScreenLocation(latLng);
// LatLng transferLatLng = projection.fromScreenLocation(screen);
// textView.setText("屏幕坐标:" + new Gson().toJson(screen));
// Toast.makeText(this, new Gson().toJson(transferLatLng), Toast.LENGTH_SHORT).show();
// }
//
//
// /**
// * 长点击地图 显示当前地图的坐标范围
// *
// * @param latLng
// */
// @Override
// public void onMapClick(LatLng latLng) {
// Projection projection = tencentMap.getProjection();
// VisibleRegion region = projection.getVisibleRegion();
// textView.setText("当前地图视野的经纬度:" + new Gson().toJson(region));
// Toast.makeText(this, new Gson().toJson(region), Toast.LENGTH_LONG).show();
// }
//}

View File

@ -1,135 +1,135 @@
package cc.winboll.studio.positions.demo.utils;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import cc.winboll.studio.positions.R;
import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class SnapshotActivity extends SupportMapFragmentActivity {
public MapView mapview = null;
public TencentMap tencentMap = null;
private ImageView imgView = null;
public TencentMap.SnapshotReadyCallback snapshotReadyCallback = new TencentMap.SnapshotReadyCallback() {
@Override
public void onSnapshotReady(Bitmap snapshot) {
imgView.setImageBitmap(snapshot);
// Log.d("线程", "run: "+Thread.currentThread().getName());
}
};
Handler handScreen = new Handler();
final CameraPosition camerPosition_GUGONG = new CameraPosition.Builder()
.target(new LatLng(39.91822, 116.397165)).zoom(14.5f).bearing(200).tilt(50).build();
final CameraPosition camerPosition_YINKE = new CameraPosition.Builder()
.target(new LatLng(31.226407, 121.48298)).zoom(17.5f).bearing(0).tilt(25).build();
private Runnable runScreenShot = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
tencentMap.snapshot(snapshotReadyCallback, Bitmap.Config.ARGB_8888);
}
};
// TencentMap.OnTrafficUpdateListener trafficUpdateListener = new
// TencentMap.OnTrafficUpdateListener() {
//
// @Override
// public void onTrafficUpdate(String city) {
// Log.e("zxy", "onTrafficUpdate(): " + city);
// // TODO Auto-generated method stub\
// handScreen.postDelayed(runScreenShot, 2000);
//
// }};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screenshot);
mapview = (MapView) findViewById(R.id.map);
tencentMap = mapview.getMap();
// tencentMap.setOnTrafficUpdate(trafficUpdateListener);
tencentMap.setTrafficEnabled(true);
tencentMap.setIndoorEnabled(true);
handScreen.postDelayed(runScreenShot, 2000);
//runOnUiThread(runScreenShot);
imgView = (ImageView) this.findViewById(R.id.imgview);
imgView.setScaleType(ImageView.ScaleType.CENTER);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mapview.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mapview.onResume();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mapview.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(0, 1, 0, "截屏坐标1");
menu.add(0, 2, 0, "截屏坐标2");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
setCoord1();
handScreen.postDelayed(runScreenShot, 2000);
break;
case 2:
setCoor2();
handScreen.postDelayed(runScreenShot, 2000);
break;
}
return super.onOptionsItemSelected(item);
}
private void setCoord1() {
CameraUpdate update = CameraUpdateFactory.newCameraPosition(camerPosition_GUGONG);
tencentMap.moveCamera(update);
}
private void setCoor2() {
CameraUpdate update = CameraUpdateFactory.newCameraPosition(camerPosition_YINKE);
tencentMap.moveCamera(update);
}
}
//import android.app.Activity;
//import android.graphics.Bitmap;
//import android.os.Bundle;
//import android.os.Handler;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.widget.ImageView;
//
//import cc.winboll.studio.positions.R;
//import cc.winboll.studio.positions.demo.basic.SupportMapFragmentActivity;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdate;
//import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory;
//import com.tencent.tencentmap.mapsdk.maps.MapView;
//import com.tencent.tencentmap.mapsdk.maps.TencentMap;
//import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition;
//import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
//
//public class SnapshotActivity extends SupportMapFragmentActivity {
// public MapView mapview = null;
//
// public TencentMap tencentMap = null;
//
// private ImageView imgView = null;
//
// public TencentMap.SnapshotReadyCallback snapshotReadyCallback = new TencentMap.SnapshotReadyCallback() {
// @Override
// public void onSnapshotReady(Bitmap snapshot) {
// imgView.setImageBitmap(snapshot);
// // Log.d("线程", "run: "+Thread.currentThread().getName());
// }
// };
//
// Handler handScreen = new Handler();
//
// final CameraPosition camerPosition_GUGONG = new CameraPosition.Builder()
// .target(new LatLng(39.91822, 116.397165)).zoom(14.5f).bearing(200).tilt(50).build();
//
// final CameraPosition camerPosition_YINKE = new CameraPosition.Builder()
// .target(new LatLng(31.226407, 121.48298)).zoom(17.5f).bearing(0).tilt(25).build();
//
// private Runnable runScreenShot = new Runnable() {
//
// @Override
// public void run() {
// // TODO Auto-generated method stub
// tencentMap.snapshot(snapshotReadyCallback, Bitmap.Config.ARGB_8888);
// }
//
// };
//
// // TencentMap.OnTrafficUpdateListener trafficUpdateListener = new
// // TencentMap.OnTrafficUpdateListener() {
// //
// // @Override
// // public void onTrafficUpdate(String city) {
// // Log.e("zxy", "onTrafficUpdate(): " + city);
// // // TODO Auto-generated method stub\
// // handScreen.postDelayed(runScreenShot, 2000);
// //
// // }};
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
//
// setContentView(R.layout.screenshot);
// mapview = (MapView) findViewById(R.id.map);
//
// tencentMap = mapview.getMap();
//
// // tencentMap.setOnTrafficUpdate(trafficUpdateListener);
// tencentMap.setTrafficEnabled(true);
// tencentMap.setIndoorEnabled(true);
// handScreen.postDelayed(runScreenShot, 2000);
// //runOnUiThread(runScreenShot);
// imgView = (ImageView) this.findViewById(R.id.imgview);
// imgView.setScaleType(ImageView.ScaleType.CENTER);
// }
//
// @Override
// protected void onPause() {
// // TODO Auto-generated method stub
// super.onPause();
// mapview.onPause();
// }
//
// @Override
// protected void onResume() {
// // TODO Auto-generated method stub
// super.onResume();
// mapview.onResume();
// }
//
// @Override
// protected void onDestroy() {
// // TODO Auto-generated method stub
// super.onDestroy();
// mapview.onDestroy();
// }
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// // TODO Auto-generated method stub
// menu.add(0, 1, 0, "截屏坐标1");
// menu.add(0, 2, 0, "截屏坐标2");
// return super.onCreateOptionsMenu(menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// // TODO Auto-generated method stub
// switch (item.getItemId()) {
// case 1:
// setCoord1();
// handScreen.postDelayed(runScreenShot, 2000);
// break;
// case 2:
// setCoor2();
// handScreen.postDelayed(runScreenShot, 2000);
// break;
// }
// return super.onOptionsItemSelected(item);
// }
//
// private void setCoord1() {
// CameraUpdate update = CameraUpdateFactory.newCameraPosition(camerPosition_GUGONG);
// tencentMap.moveCamera(update);
// }
//
// private void setCoor2() {
// CameraUpdate update = CameraUpdateFactory.newCameraPosition(camerPosition_YINKE);
// tencentMap.moveCamera(update);
// }
//}