注释问题代码
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| 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; | ||||
|     } | ||||
| //    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; | ||||
| //    } | ||||
| } | ||||
| @@ -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); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
| // | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| // | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| //                } | ||||
| //            } | ||||
| //        }); | ||||
| // | ||||
| // | ||||
| // | ||||
| // | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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{ | ||||
| // | ||||
| //                } | ||||
| //            } | ||||
| //        }); | ||||
| //    } | ||||
| // | ||||
| // | ||||
| //} | ||||
|   | ||||
| @@ -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))); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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(); | ||||
|     } | ||||
| } | ||||
| //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(); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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); | ||||
| } | ||||
|   | ||||
| @@ -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)); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| //                } | ||||
| //            } | ||||
| //        }); | ||||
| //    } | ||||
| // | ||||
| //} | ||||
|   | ||||
| @@ -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; | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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; | ||||
| //    } | ||||
| // | ||||
| // | ||||
| //} | ||||
|   | ||||
| @@ -26,172 +26,172 @@ 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(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| //    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(); | ||||
| //                } | ||||
| //            } | ||||
| //        } | ||||
| //    } | ||||
| } | ||||
| @@ -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); | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
| //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); | ||||
| // | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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(); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -30,137 +30,137 @@ import static com.tencent.map.sdk.utilities.visualization.glmodel.GLModelOverlay | ||||
| 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(); | ||||
|     } | ||||
| // | ||||
| //    /** | ||||
| //     * 和其他覆盖物相同三维模型图也可控制图层的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(); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -27,145 +27,145 @@ 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(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| //    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(); | ||||
| //                } | ||||
| //            } | ||||
| //        } | ||||
| //    } | ||||
| } | ||||
| @@ -33,148 +33,148 @@ 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); | ||||
|         } | ||||
|  | ||||
|     } | ||||
| //    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); | ||||
| //        } | ||||
| // | ||||
| //    } | ||||
| } | ||||
| @@ -24,124 +24,124 @@ 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); | ||||
|  | ||||
|  | ||||
|         } | ||||
|  | ||||
|     } | ||||
| //    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); | ||||
| // | ||||
| // | ||||
| //        } | ||||
| // | ||||
| //    } | ||||
| } | ||||
| @@ -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; | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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"); | ||||
| //    } | ||||
| // | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| //    } | ||||
| // | ||||
| //} | ||||
|   | ||||
| @@ -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; | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| //    } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -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(); | ||||
|     } | ||||
| } | ||||
| //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(); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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) { | ||||
|  | ||||
|     public void onMarkerDragEnd(Marker p1) { | ||||
|     } | ||||
|      | ||||
|     @Override | ||||
|     public void onMarkerDragEnd(Marker marker) { | ||||
|         Toast.makeText(this, "拖拽结束", Toast.LENGTH_SHORT).show(); | ||||
|     } | ||||
| //    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(); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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 :动画 | ||||
| //        } | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); //堆叠顺序,越大优先级越高 | ||||
| //} | ||||
|   | ||||
| @@ -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); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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()); | ||||
|     public void onClicked(MapPoi p1) { | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * 设置标注 | ||||
|      */ | ||||
|     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(); | ||||
|     } | ||||
| //    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(); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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) { | ||||
| // | ||||
| //            } | ||||
| //        }); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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)); //设置批量添加顶点 | ||||
| //} | ||||
|   | ||||
| @@ -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(); | ||||
|     } | ||||
| } | ||||
| //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(); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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; | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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); | ||||
| //    } | ||||
| // | ||||
| } | ||||
|   | ||||
| @@ -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)); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| //} | ||||
|   | ||||
| @@ -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); | ||||
| //            } | ||||
| //        }); | ||||
| //    } | ||||
| // | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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) { | ||||
| // | ||||
| //            } | ||||
| //        }); | ||||
| //    } | ||||
|  | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
| //            } | ||||
| //        }); | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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", "路线结果为空"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| //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", "路线结果为空"); | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -24,54 +24,54 @@ 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); | ||||
|  | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|     } | ||||
| //    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); | ||||
| // | ||||
| //            } | ||||
| //        }); | ||||
| // | ||||
| //    } | ||||
| } | ||||
| @@ -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", "路线结果为空"); | ||||
| //        } | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -36,216 +36,222 @@ 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; | ||||
|     } | ||||
| @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; | ||||
| //    } | ||||
| } | ||||
| @@ -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; | ||||
|     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.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; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
| //    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; | ||||
| //        } | ||||
| // | ||||
| //    } | ||||
| // | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| // | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
| //            } | ||||
| //        }); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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); | ||||
|             } | ||||
|         });*/ | ||||
|     public void onClick(View p1) { | ||||
|     } | ||||
|      | ||||
|  | ||||
|     // 根据动画按钮状态,调用函数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; | ||||
|         } | ||||
|     } | ||||
| //    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; | ||||
| //        } | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| //    } | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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(); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -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); | ||||
| //    } | ||||
| //} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ZhanGSKen
					ZhanGSKen