固定了Android Google地图上的标记大小

固定了Android Google地图上的标记大小,第1张

概述是否有可能使标记静止?缩放更改时,我不需要增加/减小标记大小.我知道地面覆盖-这里不是一个选择.结果应该是这样的:解决方法:BenP在他的评论中是正确的:“标记不会基于缩放更改大小”.但是,可以通过针对每个缩放级别删除并重新创建具有自定义图标大小的标记(例如,在onCameraIdle()

是否有可能使标记静止?
缩放更改时,我不需要增加/减小标记大小.
我知道地面覆盖-这里不是一个选择.

结果应该是这样的:

解决方法:

Ben P在他的评论中是正确的:“标记不会基于缩放更改大小”.但是,可以通过针对每个缩放级别删除并重新创建具有自定义图标大小的标记(例如,在onCameraIdle()中)来实现此标记行为.带有:

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {    private static final String TAG = MainActivity.class.getSimplename();    private static final int DIAMETER_IN_METERS = 300;    private final LatLng MARKER_LOCATION = new LatLng(37.762555, -122.244221);    private GoogleMap mGoogleMap;    private MapFragment mMapFragment;    private Marker mMarker = null;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        mMapFragment = (MapFragment) getFragmentManager()                .findFragmentByID(R.ID.map_fragment);        mMapFragment.getMapAsync(this);    }    @OverrIDe    public voID onMapReady(GoogleMap GoogleMap) {        mGoogleMap = GoogleMap;        mGoogleMap.setonCameraIDleListener(new GoogleMap.OnCameraIDleListener() {            @OverrIDe            public voID onCameraIDle() {                if (mMarker != null) {                    mMarker.remove();                }                mMarker = createResizedMarker(MARKER_LOCATION);            }        });        mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(MARKER_LOCATION, 16));    }    private Marker createResizedMarker(LatLng marker_location) {        // get vector drawable        final Drawable iconDrawable = getResources().getDrawable(R.drawable.ic_letter_m);        // calc map resolution (meters per pixel) for current zoom level for details see e.g. https://msdn.microsoft.com/en-us/library/aa940990.aspx        final double meters_per_pixel = (Math.cos(mGoogleMap.getCameraposition().target.latitude * Math.PI / 180) * 2 * Math.PI * 6378137) / (256 * Math.pow(2, mGoogleMap.getCameraposition().zoom));        // calc marker icon diameter in pixels        final int diameter = (int)(DIAMETER_IN_METERS / meters_per_pixel);        // create marker icon bitmap for current scale        final Bitmap bitmap = Bitmap.createBitmap(diameter, diameter, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(bitmap);        iconDrawable.setBounds(0, 0, canvas.getWIDth(), canvas.getHeight());        iconDrawable.draw(canvas);        Marker marker = mGoogleMap.addMarker(new MarkerOptions()                .position(MARKER_LOCATION)                .anchor(0.5f, 0.5f)                .icon(BitmapDescriptorFactory.fromBitmap(bitmap)));        return marker;    }}

和R.drawable.ic_letter_m-xml矢量可绘制(用于完美缩放),例如:

<?xml version="1.0" enCoding="utf-8"?><vector xmlns:androID="http://schemas.androID.com/apk/res/androID"        androID:wIDth="512dp"        androID:height="512dp"        androID:vIEwportWIDth="512"        androID:vIEwportHeight="512">    <path        androID:name="canvas_background"        androID:pathData="M -1 -1 H 581 V 401 H -1 V -1 Z" />    <path        androID:name="SVGCleanerID_0"        androID:fillcolor="#54BBFF"        androID:pathData="M256,0l-61.811005,256l61.811005,256c141.384979,0 256,-114.61499256,-256s-114.61499,-256 -256,-256z" />    <path        androID:name="SVGCleanerID_1"        androID:fillcolor="#8DD2FF"        androID:pathData="M0,256c0,141.384979 114.614998,256 256,256l0,-512c-141.385002,0 -256,114.614998-256,256z" />    <path        androID:name="svg_1"        androID:fillcolor="#C6E8FF"        androID:pathData="M256,30.905001l0,450.188993c124.31601,0 225.095001,-100.777985225.095001,-225.095001s-100.778992,-225.093992 -225.095001,-225.093992z" />    <path        androID:name="svg_2"        androID:fillcolor="#FFFFFF"        androID:pathData="M450.188995,256c0,-124.315994 -86.94101,-225.094999-194.188995,-225.094999c-124.315994,0 -225.094999,100.779005-225.094999,225.094999s100.779005,225.095001 225.094999,225.095001c107.247986,0194.188995,-100.778992 194.188995,-225.095001z" />    <path        androID:name="svg_3"        androID:fillcolor="#54BBFF"        androID:pathData="M306.993988,395.589996c-11.378998,0 -20.604004,-9.223999-20.604004,-20.604004l0,-137.592987l-11.453003,26.722992c-3.246002,7.576019-10.694977,12.488007 -18.937988,12.488007c-8.240997,0 -15.69101,-4.912018-18.938004,-12.488007l-11.453003,-26.722992l0,137.593018c0,11.378998-9.223999,20.603973 -20.604004,20.603973c-11.378998,0 -20.603989,-9.223999-20.603989,-20.603973l0,-237.972015c0,-9.782997 6.878998,-18.21599616.460999,-20.182999c9.584,-1.968002 19.227005,3.07500523.080002,12.065994l32.059006,74.798004l32.056,-74.796997c3.852997,-8.99099713.502014,-14.032997 23.079987,-12.066002c9.583008,1.968002 16.460999,10.40100116.460999,20.183006l0,237.971985c0.001007,11.377991 -9.223999,20.602997-20.602997,20.602997z" />    <path        androID:name="SVGCleanerID_0_1_"        androID:fillcolor="#F655A0"        androID:pathData="M256,0l-61.811005,256l61.811005,256c141.384979,0 256,-114.61499256,-256s-114.61499,-256 -256,-256z" />    <path        androID:name="SVGCleanerID_1_1_"        androID:fillcolor="#F655A0"        androID:pathData="M0,256c0,141.384979 114.614998,256 256,256l0,-512c-141.385002,0 -256,114.614998-256,256z" />    <path        androID:name="svg_8"        androID:fillcolor="#FFFFFF"        androID:pathData="M335.771271,393.589996c-17.577087,0 -31.826935,-9.223999-31.826935,-20.604004l0,-137.592987l-17.691406,26.722992c-5.014069,7.576019-16.520477,12.488007 -29.253418,12.488007c-12.729828,0 -24.237839,-4.912018-29.253448,-12.488007l-17.691406,-26.722992l0,137.593018c0,11.378998-14.248276,20.603973 -31.82692,20.603973c-17.577087,0 -31.826889,-9.223999-31.826889,-20.603973l0,-237.972015c0,-9.782997 10.625946,-18.21599625.427231,-20.182999c14.804367,-1.968002 29.699875,3.07500535.651581,12.065994l49.521408,74.798004l49.516754,-74.796997c5.951721,-8.99099720.856506,-14.032997 35.651581,-12.066002c14.802826,1.968002 25.427216,10.40100125.427216,20.183006l0,237.971985c0.001556,11.377991 -14.24826,20.602997-31.825348,20.602997z" /></vector>

你得到类似的东西:

但是确实,Ground Overlay可以完成所有工作.对于这样的任务,最好使用地面叠加层(至少要获得更好的性能和平滑缩放).如果需要,例如万一需要绘制汽车运动,可以随时重新创建地面叠加层(具有不同的位图或位图大小,如上面的标记).您也可以使用.setBearing()旋转标记等地面叠加层.

总结

以上是内存溢出为你收集整理的固定了Android Google地图上的标记大小全部内容,希望文章能够帮你解决固定了Android Google地图上的标记大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1091842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存