精华内容
下载资源
问答
  • 首先声明一下,这是我第一次写博客,有很多东西清楚 ,还请见谅。  昨天周末的时候,帮同事做一个安卓app里面的百度地图的东西。其实就是类似百度导航的东西,有一个箭头,可以转动。他的需求时,通过服务器传的...

                 首先声明一下,这是我第一次写博客,有很多东西不清楚 ,还请见谅。

                  昨天周末的时候,帮同事做一个安卓app里面的百度地图的东西。其实就是类似百度导航的东西,有一个箭头,可以转动。他的需求时,通过服务器传的参数来动态改变。我之前也没做过app,更没做过app百度地图。在网上找了很多都没有搞定,最后自己看来一个api,才搞定的。下面把demo附上去,希望能对一些人有所帮助,同时自己也能有所积累。

    需要的包我就不做解释了,大家应该比我更加清楚!

    Activity代码:




    import android.app.Activity;
    import android.os.Bundle;


    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BitmapDescriptor;
    import com.baidu.mapapi.map.BitmapDescriptorFactory;
    import com.baidu.mapapi.map.MapStatus;
    import com.baidu.mapapi.map.MapStatusUpdate;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.MarkerOptions;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.model.LatLng;


    public class BaiDuMap  extends Activity{
    private MapView mMapView = null;  
    private BaiduMap mBaiduMap = null;
    MyLocationData.Builder builder = new MyLocationData.Builder();
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);   
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
            //注意该方法要再setContentView方法之前实现  
            SDKInitializer.initialize(getApplicationContext());  
            setContentView(R.layout.bmap);  
            //获取地图控件引用  
            mMapView = (MapView) findViewById(R.id.bmapView);  
            mBaiduMap = mMapView.getMap();
        // 构造定位数据
            //深圳中心点
            LatLng point = new LatLng(22.549525, 114.063918);
            BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.navigation);  
            //这里是按逆时针旋转的   这里是270度
            OverlayOptions options = new MarkerOptions().icon(icon).position(point).rotate(270);  
            
            mBaiduMap.addOverlay(options);  
            MapStatus mMapStatus = new MapStatus.Builder()  
            .target(point)  
            .zoom(18)  
            .build();  
            //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化  
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);  
            //改变地图状态  
            mBaiduMap.setMapStatus(mMapStatusUpdate);


        }  
        @Override  
        protected void onDestroy() {  
            super.onDestroy();  
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
            mMapView.onDestroy();  
        }  
        @Override  
        protected void onResume() {  
            super.onResume();  
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
            mMapView.onResume();  
            }  
        @Override  
        protected void onPause() {  
            super.onPause();  
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
            mMapView.onPause();  
            }  
    }

                     


        

    展开全文
  • 高德地图设置位置,重新选定


    最近公司需要做范围内打卡的功能,所以研究了下高德地图的SDK,首先注册申请key就不多讲了,百度有很详细的资料,下面主要记录下实现方法。demo地址在最下方:下载后自行更新cocoapod文件下载依赖即可运行

    包含功能1、定位 2、逆地理位置3、设置范围打卡 4、自定义指针选定位置

    我用的是pod管理工程,这是所有的sdk文件

    pod 'AFNetworking'

    pod 'FMDB'

    pod 'YYKit'


    pod 'AMap3DMap'

    pod 'AMapSearch'


    更新下载好cocoapod依赖之后在appdelegate里面设置关键key

      // 配置高德地图

        [AMapServicessharedServices].apiKey =@"*********************";

        

    这样我们就可以正常的写我们的方法了,写一个界面,里面显示我们的地图,定位信息

    在这里我们用的是MAMapView,而不是用的manager网上有很多方法都是用的manager,我感觉既然有地图试图为什么不直接用呢?


    // 设置打卡地点经纬度

    @property (nonatomic,strong)NSString *localLongitude;

    @property (nonatomic,strong)NSString *localLatitude;


    // 高德地图

    @property (nonatomic,strong)MAMapView *mapView;

    //全局的大头针

    @property(nonatomic,strong)MAPointAnnotation *pointAnnotation;

    // 定位当前位置的经纬度

    @property (nonatomic,strong)NSString *userLongitude;

    @property (nonatomic,strong)NSString *userLatitude;


    在viewdidappear里面家在信息

        // 进入界面就以定位点为地图中心

        [self.mapViewsetCenterCoordinate:CLLocationCoordinate2DMake([self.userLatitudefloatValue], [self.userLongitudefloatValue])animated:NO];

        // 将绘制的图形添加到地图上

        [self.mapViewaddOverlays:self.circles];


    在viewdidload加载地图信息


        // https配置

        [AMapServicessharedServices].enableHTTPS =YES;

        // 初始化地图

        self.mapView = [[MAMapViewalloc]initWithFrame:CGRectMake(0,NAVIGATIONBAR_HEIGHT,SCREEN_WIDTH,SCREEN_HEIGHT -NAVIGATIONBAR_HEIGHT)];

        self.mapView.delegate =self;

        // 显示定位小蓝点

        self.mapView.showsUserLocation =YES;

        self.mapView.showsCompass =NO;

        //创建手势对象

        UILongPressGestureRecognizer *tap =[[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longPress:)];

        [_mapViewaddGestureRecognizer:tap];

        

        //全局的大头针

        _pointAnnotation = [[MAPointAnnotationalloc]init];

        _pointAnnotation.coordinate =CLLocationCoordinate2DMake([self.userLatitudedoubleValue], [self.userLongitudedoubleValue]);

        [_mapViewaddAnnotation:_pointAnnotation];

        [_mapViewsetCenterCoordinate:CLLocationCoordinate2DMake([self.userLatitudedoubleValue], [self.userLongitudedoubleValue])animated:YES];    

        // 追踪用户的location更新

        self.mapView.userTrackingMode =MAUserTrackingModeFollow;

        // 放大等级

        [self.mapViewsetZoomLevel:16animated:YES];

        

        [self.viewaddSubview:self.mapView];

    下面是设置代理方法,动态打开需要选中一个点作为打开地点,我们添加一个长按手势获取动态位置,然后作为打卡点,通过获得的经纬度逆地理位置信息显示在title上,然后与定位获得的经纬度比较判定是否满足打卡范围。这样就完整实现了定位打卡的功能。

    下面是长按手势方法

    //自定义大头针我这里只是把大头针变成一张自定义的图片

    - (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation

    {

        if ([annotationisKindOfClass:[MAPointAnnotationclass]])

        {

            staticNSString *reuseIndetifier =@"annotationReuseIndetifier";

            MAAnnotationView *annotationView = (MAAnnotationView *)[mapViewdequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];

            if (annotationView ==nil)

            {

                annotationView = [[MAAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:reuseIndetifier];

            }

            annotationView.image = [UIImageimageNamed:@"locationPoint_select"];

            //设置中心点偏移,使得标注底部中间点成为经纬度对应点

            annotationView.centerOffset =CGPointMake(0, -18);

            return annotationView;

        }

        returnnil;

    }


    - (void)longPress:(UIGestureRecognizer*)gestureRecognizer{

    //   if (gestureRecognizer.state == UIGestureRecognizerStateEnded){

    //       return;

    //   }

       [_mapViewremoveAnnotation:_pointAnnotation];

        //坐标转换

        CGPoint touchPoint = [gestureRecognizer locationInView:_mapView];

        CLLocationCoordinate2D touchMapCoordinate =

       [_mapViewconvertPoint:touchPointtoCoordinateFromView:_mapView];

        

        _pointAnnotation.coordinate = touchMapCoordinate;

        //_pointAnnotation.title = @"设置名字";

        

       [_mapViewaddAnnotation:_pointAnnotation];

        

       [selfsetLocationWithLatitude:touchMapCoordinate.latitudeAndLongitude:touchMapCoordinate.longitude];

    }

    - (void)setLocationWithLatitude:(CLLocationDegrees)latitude AndLongitude:(CLLocationDegrees)longitude{

        

        NSString *latitudeStr = [NSStringstringWithFormat:@"%f",latitude];

        NSString *longitudeStr = [NSStringstringWithFormat:@"%f",longitude];

        

        NSLog(@"自己加的%@%@",latitudeStr,longitudeStr);

        //反编码经纬度---->位置信息

        CLLocation *location=[[CLLocationalloc]initWithLatitude:latitudelongitude:longitude];

        CLGeocoder *geocoder=[[CLGeocoderalloc]init];

        [geocoder reverseGeocodeLocation:locationcompletionHandler:^(NSArray *placemarks,NSError *error) {

            if (error) {

                NSLog(@"反编码失败:%@",error);

                  [selfpresentAlertControllerWithTitle:@"提示"message:[NSStringstringWithFormat:@"该网点经纬度信息有误,请重新标注"]cancelTitle:@"好的"];

            }else{

                

                self.localLatitude = latitudeStr;

                self.localLongitude = longitudeStr;

                

                // 重新绘制打卡范围

                [selfsetAddress];

                

                //NSLog(@"反编码成功:%@",placemarks);

                CLPlacemark *placemark=[placemarkslastObject];

                //NSLog(@"%@",placemark.addressDictionary[@"FormattedAddressLines"]);

                NSDictionary *addressDic=placemark.addressDictionary;

                

                NSString *state=[addressDicobjectForKey:@"State"];

                NSString *city=[addressDicobjectForKey:@"City"];

                NSString *subLocality=[addressDicobjectForKey:@"SubLocality"];

                NSString *street=[addressDicobjectForKey:@"Street"];

                NSString *Thoroughfare=[addressDicobjectForKey:@"Thoroughfare"];

                

                NSString *strLocation;

                if (street.length ==0 || street ==NULL || [streetisEqualToString:@"(null)"]) {

                    strLocation= [NSStringstringWithFormat:@"%@",subLocality];

                }elseif (Thoroughfare.length ==0 || Thoroughfare == NULL || [ThoroughfareisEqualToString:@"(null)"]||([streetisEqualToString:Thoroughfare])){

                    strLocation= [NSStringstringWithFormat:@"%@%@",subLocality,street];

                    

                }else{

                    strLocation= [NSStringstringWithFormat:@"%@%@%@",subLocality,street,Thoroughfare];

                }

                NSLog(@"%@%@%@",state,city,strLocation);

                self.title = strLocation;

                

            }

        }];

    }

    其他还有一些小功能,比如比例缩放,重新定位。离线地图等

    其他功能参考一下高德地图,可是实现长按出现选定位置信息,反编译出地理信息,名称等。

    demo地址(这招我跟别人学的,哈哈哈),关注公众号,行走的java,回复001获得----多谢支持,共同学习一起进步,我不是为了流量主哦,里面有很多干货,以后会更多!保你关注不亏!





    展开全文
  • 因为这是关于百度地图的系列博客,本文章的百度地图定位在上一篇(android 百度地图系列之地图初始化及定位)中已经详细介绍过,就在上篇博客的基础上,添加方向传感器来使定位图标显示自己在地图上的方向

    因为这是关于百度地图的系列博客,本文章的百度地图定位在上一篇(android 百度地图系列之地图初始化及定位)中已经详细介绍过,就在上篇博客的基础上,添加方向传感器来使定位图标显示自己在地图上的方向。
    首先需要一张方向朝上的定位标志图。(CSDN上传图片失败,下次修改)
    注意:一定要方向朝上,要不然方向会有偏差

    在自定义定位图标的时候需要bitmapDescriptor,所以需要将bitmapDescriptor获取到

    //初始化图标
    bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.arrow);

    并在MyLocationListener的onReceiveLocation方法中添加自定义的定位图标显示方式。

    //配置定位图层显示方式,使用自己的定位图标
    MyLocationConfiguration configuration = new MyLocationConfiguration(LocationMode.NORMAL, true, bitmapDescriptor);
    mBaiduMap.setMyLocationConfigeration(configuration);

    这样,自定义的图标就显示出来了,现在需要与方向传感器结合来实现带方向的定位图标,并在旋转手机的时候,自动旋转图标。
    现在需要一个传感器的监听,定义一个了类实现SensorEventListener,重写onSensorChanged()和onAccuracyChanged()方法。其中onAccuracyChanged()监听精度改变不需要,只要通过onSensorChanged()监听x轴方向改变就满足需要。
    直接上代码,注释很清楚

    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    /**
     * 方向传感器监听
     * @author wangjian
     *
     */
    public class MyOrientationListener implements SensorEventListener{
        //传感器管理者
        private SensorManager mSensorManager;
        //上下文
        private Context mContext;
        //传感器
        private Sensor mSensor;
    
        //方向传感器有三个坐标,现在只关注X
        private float mLastX;
        //构造函数
        public MyOrientationListener(Context context) {
            this.mContext = context;
        }
        //开始监听
        @SuppressWarnings("deprecation")
        public void start(){
            //获得传感器管理者
            mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
            if(mSensorManager!=null){//是否支持
                //获得方向传感器
                mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
            }
            if(mSensor!=null){//如果手机有方向传感器,精度可以自己去设置,注册方向传感器
                mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI);
            }
        }
        //结束监听
        public void stop(){
            //取消注册的方向传感器
            mSensorManager.unregisterListener(this);
        }
        //传感器发生改变时
        @SuppressWarnings("deprecation")
        @Override
        public void onSensorChanged(SensorEvent event) {
            //判断返回的传感器类型是不是方向传感器
            if(event.sensor.getType() == Sensor.TYPE_ORIENTATION){
                //只获取x的值
                float x = event.values[SensorManager.DATA_X];
                //为了防止经常性的更新
                if(Math.abs(x-mLastX)>1.0){
                    if(onOrientationListener!=null){
                        onOrientationListener.onOrientationChanged(x);
                    }
                }
                mLastX = x;
            }
        }
    
        //当传感器精度发生改变,当前不用
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
        private OnOrientationListener onOrientationListener;
    
        public void setOnOrientationListener(OnOrientationListener onOrientationListener) {
            this.onOrientationListener = onOrientationListener;
        }
    
        //回掉方法
        public interface OnOrientationListener{
            void onOrientationChanged(float x);
        }
    }

    开始在定位中实现方向传感器的结合。
    将initMyLoc()添加到onCreate()中。

     private void initMyLoc() {
        //初始化图标
        bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.arrow);
        //方向传感器监听
        myOrientationListener = new MyOrientationListener(this);
        myOrientationListener.setOnOrientationListener(new OnOrientationListener() {
            @Override
            public void onOrientationChanged(float x) {
                //将获取的x轴方向赋值给全局变量
                mLastX = x;
            }
        });
    }

    修改获取location信息时的配置,添加旋转角度,这样每次定位的时候就能旋转角度了。

    //自定义的定位监听
       private class MyLocationListener implements BDLocationListener{
        @Override
        public void onReceiveLocation(BDLocation location) {
            //将获取的location信息给百度map
            MyLocationData data = new MyLocationData.Builder()  
                .accuracy(location.getRadius())  
                // 此处设置开发者获取到的方向信息,顺时针0-360,mLastX就是获取到的方向传感器传来的x轴数值 
                .direction(mLastX)
                .latitude(location.getLatitude())  
                .longitude(location.getLongitude())
                .build();
            mBaiduMap.setMyLocationData(data);
            //更新经纬度
            mLatitude = location.getLatitude();
            mLongitude = location.getLongitude();
            //配置定位图层显示方式,使用自己的定位图标
            //LocationMode定位模式有三种:普通模式,跟随模式,罗盘模式,在这使用普通模式
            MyLocationConfiguration configuration = new MyLocationConfiguration(LocationMode.NORMAL, true, bitmapDescriptor);
            mBaiduMap.setMyLocationConfigeration(configuration);
            if(isFirstLocation){
                //获取经纬度
                LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
                MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
                //mBaiduMap.setMapStatus(status);//直接到中间
                mBaiduMap.animateMapStatus(status);//动画的方式到中间
                isFirstLocation = false;
                showInfo("位置:" + location.getAddrStr());
            }
        }
     }

    最后展示一下:
    ps:csdn上传图片失败。。不知道怎么回事,下回上传一下
    这里写图片描述

    展开全文
  • 百度地图自定义图标动画

    千次阅读 2016-01-05 09:46:22
    先讲一下原来的思路,因为安卓有一个动画效果是可以从底部上升的,当时就想着只要实现动画效果,放在地图上就是了,后来发现百度地图好像支持这种动画,自己提供的动画是需要一组图片组合的,总能设置100个图片...

    项目中需要在百度地图上完成一个从一个图片底部慢慢上升的动画效果,这里写图片描述
    先讲一下原来的思路,因为安卓有一个动画效果是可以从底部上升的,当时就想着只要实现动画效果,放在地图上就是了,后来发现百度地图好像不支持这种动画,自己提供的动画是需要一组图片组合的,总不能设置100个图片吧。所以换了思路。先介绍当时参考的两篇文章。
    第一篇是关于动画的,动画效果,ClipDrawable是裁剪动画,Android中的进度条就是使用ClipDrawable来实现的,根据设置level的值来决定剪切区域的大小。现在先介绍一下用法
    相关属性:

    clipOrietntion:设置剪切的方向,可以设置水平和竖直2个方向

    gravity:从那个位置开始裁剪

    drawable:引用的drawable资源,为空的话需要有一个Drawable类型的子节点
    使用示例:

    核心就是通过代码修改ClipDrawable的level即可!

    这里我们实现一个类似于进度条的效果,另外这个Level的值是0~10000哦:

    ①定义一个ClipDrawable的资源xml:

    
    
        <?xml version="1.0" encoding="utf-8"?>  
        <clip xmlns:android="http://schemas.android.com/apk/res/android"  
            android:clipOrientation="horizontal"  
            android:drawable="@drawable/load"  
            android:gravity="left" />  

    ②在activity_main主布局文件中设置一个ImageView,将src设置为clipDrawable!,写成了blackground的话可是会报空指针

    
    
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
            xmlns:tools="http://schemas.android.com/tools"  
            android:layout_width="match_parent"  
            android:layout_height="match_parent"  
            android:orientation="vertical"  
            tools:context="com.jay.example.drawabletest.MainActivity" >  
    
            <ImageView  
                android:id="@+id/imgShow1"  
                android:layout_width="match_parent"  
                android:layout_height="match_parent"  
                android:src="@drawable/clip_one" />  
    
        </LinearLayout>  

    代码中调用

      private Handler handler = new Handler() {  
            @Override  
            public void handleMessage(Message msg) {  
                if (msg.what == 0x123) {  
                    cd.setLevel(cd.getLevel() + 500);  
                }  
            }  
        };  
    
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            imgShow1 = (ImageView) findViewById(R.id.imgShow1);  
            // 核心实现代码  
            cd = (ClipDrawable) imgShow1.getDrawable();  
            final Timer timer = new Timer();  
            timer.schedule(new TimerTask() {  
                @Override  
                public void run() {  
                    handler.sendEmptyMessage(0x123);  
                    if (cd.getLevel() >= 10000) {  
                        timer.cancel();  
                    }  
                }  
            }, 0, 300);  
        }  

    第二篇是关于地图自定义动画的地图自定义动画

    先说一下本例实现的思路吧,先传两张照片,对比一下,
    这里写图片描述这里写图片描述
    说明一下,第一张图片是默认的进度为0,第二张图片是进度为100的,思路就是以进度为0的图片作为背景,也就是在某一坐标点上进行标注,第二张图片在同一坐标点上进行标注,第一张图片不动,第二张图片也就是进度100的图片,则进行裁剪,每隔一段时间只显示一部分,举个例子,10秒的时候进度是10,则只显示图片十分之一的高度,然后20秒显示五分之一的高度,用五分之一高度的图片替换十分之一高度的图片,并且将十分之一高度的图片释放掉。简单说吧,就是进度为0的图片不动,进度为100的图片根据时间只显示一部分。
    在上代码之前,先说一下做百度地图需要注意的地方,也是纠结了我好长时间的地方,百度地图提供了不少demo,然后每一个跑起来都是可以的,问题就是组合起来会出不少问题,我的经验就是1.尽量不要用demo里边的.jar或者.so文件,要在这个地方下载百度地图SDK下载,2.最好先写一个小demo,把需要组合的功能调试成功再放到自己的项目里边,3.要对自己的项目勤备份,尤其是有大的改动之前,万一开发中出现什么问题,还可以找到原来的备份进行修改
    好了,先上代码吧
    1.进度为0的图片在地图上设置标注
    将进度为0的图片放在地图上进行标注,作为背景,xml布局中只有一个地图,就不写了

     //获取地图控件引用
            mMapView = (MapView) view.findViewById(R.id.bmapView);
    
            mBaiduMap = mMapView.getMap();
            //定义Maker坐标点
            pt = new LatLng(31.546372, 120.297545);
            Bitmap bitmapBack = BitmapFactory.decodeResource(getActivity().getResources(), R.mipmap.charge_0);
            BitmapDescriptor bitmapDescriptorBack = BitmapDescriptorFactory.fromBitmap(bitmapBack);
            //构建MarkerOption,用于在地图上添加Marker
            OverlayOptions option = new MarkerOptions()
                    .position(pt)
                    .icon(bitmapDescriptorBack);
            mBaiduMap.addOverlay(option);

    2.进度为100的图片随时间显示高度递增
    先来说一下裁剪方法

     public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)

    属性说明:
    surce:用来剪裁的图片源;
    x:剪裁x方向的起始位置;
    y:剪裁y方向的起始位置;
    width:剪裁的宽度;
    height:剪裁的高度;
    filer:???
    思路就是定义一个handler,然后随时间进行裁剪图片高度,裁剪不同的图片,用新图片在进度为0图片标注的坐标点进行标注,释放掉旧图片,点击按钮开启handler,
    代码

       private PopupWindow popupWindow;
        private Bitmap bitmapCharging = null;//图片
        private Bitmap bitmapChargingCrop = null;//裁剪以后的图片
        private Marker mMarkCharging = null;//图片在地图上显示的mark
        private Marker oldMark;
        private BitmapDescriptor bitmapDescriptor;
        private Button buttonProgress;
        //进度值
        private int chargingProgress = 0;
     private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    chargingProgress++;
                    if (bitmapCharging != null) {
                        int bitHeight = bitmapCharging.getHeight();
                        int bitmapProgress = chargingProgress * bitHeight / 100;//实际图片需要截取的高度,进度是0~100,换算
                        if (bitmapChargingCrop != null) {
                            bitmapChargingCrop.recycle();//释放掉之前的裁剪的图片
                        }
                        if (bitmapDescriptor != null) {
                            bitmapDescriptor.recycle();//释放掉之前的裁剪的图片
                        }
                        if (bitHeight - bitmapProgress >= 0) {
                            if (chargingProgress > 100) {
                                chargingProgress = 100;
                            }
                            buttonProgress.setText((chargingProgress) + "%");
                            int height = bitmapCharging.getHeight();
                            int a = bitHeight - bitmapProgress;
                            L.e("height", height + "," + a);
                            try {
                                bitmapChargingCrop = Bitmap.createBitmap(bitmapCharging, 0, bitHeight - bitmapProgress, bitmapCharging.getWidth(), bitmapProgress);//裁剪以后的图片
                                bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmapChargingCrop);
                                OverlayOptions option = new MarkerOptions()
                                        .position(pt)
                                        .icon(bitmapDescriptor);
    
                                oldMark = mMarkCharging;
                                if (oldMark != null) {
                                    oldMark.remove();
                                }
    
                                mMarkCharging = (Marker) (mBaiduMap.addOverlay(option));
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
    
                    }
    
                }
            }
        };
         @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
      bitmapCharging = BitmapFactory.decodeResource(getActivity().getResources(), R.mipmap.charge_100);
    
     Button buttonAdd = (Button) view.findViewById(R.id.id_addY);
            buttonAdd.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final Timer timer = new Timer();
                    timer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            handler.sendEmptyMessage(0x123);
                            if (chargingProgress >= 100) {
                                timer.cancel();
                            }
                        }
                    }, 0, 300);
                }
            });
      }

    3.显示进度文字
    这个我就偷懒了,百度地图上不是有一个InfoWindow吗,而且自定义的还需要图片背景,我就是用了一个透明图片,然后在上边写字,还有一个就是为了显示清楚,需要设置字体阴影,使用这个方法
    public void setShadowLayer (float radius, float dx, float dy, int color)
    radius:阴影半径
    dx:X轴方向的偏移量
    dy:Y轴方向的偏移量
    color:阴影颜色
    ok,上代码

       //创建InfoWindow展示的view
            buttonProgress = new Button(getActivity());
            buttonProgress.setTextSize(13);
            //阴影效果, public   void   setShadowLayer (float radius, float dx, float dy, int color)
            //radius:阴影半径
           // dx:X轴方向的偏移量
          //  dy:Y轴方向的偏移量
          //  color:阴影颜色
    
          //  注意:如果半径被设置为0,意思就是去掉阴影。
            buttonProgress.setShadowLayer(1F, 1F, 5F, Color.BLACK);
            TextPaint tp = buttonProgress.getPaint();
            tp.setFakeBoldText(true);
    
            buttonProgress.setTextColor(getActivity().getResources().getColor(R.color.text_progress));
            buttonProgress.setBackgroundResource(R.drawable.alpha);
            InfoWindow mInfoWindow = new InfoWindow(buttonProgress, pt, -bitmapBack.getWidth() / 4);
    //显示InfoWindow
            mBaiduMap.showInfoWindow(mInfoWindow);

    项目比较近,所以我只想到这样的实现方法,应该还会有更好的方法的。。。

    展开全文
  • ============问题描述============ 旋转手机的时候,指针会旋转,请问如何实现? ============解决方案1============ 我用的百度...
  • 背景:公司想要做一个基于百度地图实时展示车的运行轨迹,且在运行过程中需要车头方向随着角度进行变化。 1.先把地图构建出来,然后造一组数据用以画线。 数据格式为: var PointArr = [ {long: 117.128937 ,lat:...
  • Android 高德地图上自定义动画

    千次阅读 2018-07-27 15:14:30
    高德提供了SmoothMoveMarkerAPI的调用,用于平滑移动,只需要给point点就好了 还有animation的封装,对 RotateAnimation,AlphaAnimation,ScaleAnimation,TranslateAnimation,都有基本的操作...比如,在地图上画...
  • 地图 第十七周实验目的 接入百度地图API 掌握少量的百度地图API接口 二、实现内容 基于之前的应用,初始界面仍为摇一摇 跳转后的界面为百度地图 地图定位在目前的经纬度,需要可以动态改变 界面中心为...
  • 在游戏开发中,经常会碰见需要使用地图拖拽,例如通关关卡地图,可以允许用户拖拽选择进入哪个关卡,那么在cocos2dx中如何来实现呢?请见如下方案。 我们先创建一个精灵: auto s_map= Sprite::create(s_map_img); s...
  • 地图的制作网上其实有很多教程,最常见的就是MiniMap使用正交摄像机Render Texture制作,这种摄像机会实时在上空更新地图。但是使用摄像机无疑是耗费资源的,有时候需要的小功能其实只是需要标识自己所在的位置,...
  • 在Lib9中有可以显示动画、以及游戏中的地图,那么动画和游戏中的地图这些图片资源是如何组织的呢,这个就要 用到Lib9Editor编辑器了,Lib9Editor是Lib9引擎配套的动画、地图等编辑器,它具有功能强大操作方便的特性...
  • 再再论指针

    2012-04-17 17:10:48
    再再论指针 篇首语  指针是C语言规范里面一项核心内容,指针具有与生俱来的优势,利用指针可以写出许多短小精悍、效率极高的代码,它是C语言一把无可替代的利器,凭着这把利器,C语言与其它高级语言相比至少在...
  • 再再论指针 篇首语  指针是C语言规范里面一项核心内容,指针具有与生俱来的优势,利用指针可以写出许多短小精悍、效率极高的代码,它是C语言一把无可替代的利器,凭着这把利器,C语言与其它高级语言相比至少在...
  • 方法返回值说明poiOnAMAP(obj:Object)唤起高德地图客户端marker页其中Object里面包含有{ id: "B000A7BD6C",POIIDname:String, 必要参数location:LngLat|position属性 必须参数}detailOnAMAP(obj:Object)唤起高德地图...
  • 再论指针_绝好东东

    2013-02-07 21:44:03
    摘自: CSDN文库 整理: 王向阳 指针是C语言规范里面一项核心内容,指针具有与生俱来的优势,利用指针可以写出许多短小精悍、效率极高的代码,它是C语言一把无可替代的利器,凭着这把利器,C语言与其它高级语言相比...
  • 百度地图地图API(常用)

    千次阅读 2020-01-05 18:58:27
    百度地图开发常用网站 1、百度地图开放平台 http://lbsyun.baidu.com/ 2、百度地图Javascript API JavaScript API v3.0http://lbsyun.baidu.com/index.php?title=jspopular3.0 JavaScript API v2.0...
  • 1. 指针运算(指针部分最难掌握的地方)(五颗星)   int main() {    // 指针的运算是指针难点的起源    // 指针的运算分为:  // 1>类型运算(强转)  // 将一个指针类型的变量强制
  • 百度地图综合

    千次阅读 2016-04-19 20:26:15
    本文主要包括百度地图API的综合应用,主要内容如下 地图图层展示,包括热力图与实时路况图 添加覆盖物,包括图片,文字,折线等 地图控制,包括俯视,旋转,放大,缩小等 定位,并且用图标标示出来 POI检索,检索出...
  • 包括对关键帧的插入,验证最近生成的地图点并进行筛选,然后生成新的地图点, 使用局部捆集调整(Local BA), 最后再对插入的关键帧进行筛选,去除多余的关键帧。 C. 闭环检测(LoopClosing) 闭环检测...
  • 百度地图初学二

    2015-03-02 23:09:42
    刚学百度地图感觉比较乱,逻辑有点混乱,可能是编的太少的缘故,看网上的视频,感觉总是理解,这时候就去看地图开发文档,官网上就有,本人比较笨,把基本的的类都抄了一边,对百度地图有了初步了解。大家可以去...
  • ------Java培训、Android培训、...1) 数组名只是代表数组的首地址,代表整个数组 2) 指向数组元素的指针称为数组指针int *p = &a[0]或int *p = a; 3) 使用数组指针间接访问数组的元素 4) 误区:数组指针p
  • krpano 户型地图雷达

    2019-10-08 02:51:47
     地图上显示表示场景位置的坐标点,和可控制场景观看方向的雷达区。 插件:  radar.js(plugins)  radar.swf(plugins) 图片:  1.地图开关按钮  2.场景小地图  3.雷达标点的选中和未选中两张图 ...
  • krpano之小地图

    2017-08-17 11:02:00
     地图上显示表示场景位置的坐标点,和可控制场景观看方向的雷达区。 插件:  radar.js(plugins)  radar.swf(plugins) 图片:  1.地图开关按钮  2.场景小地图  3.雷达标点的选中和未选中两张图 ...
  • 上篇文章实现了坦克与地图碰撞的检测,这篇我们继续完成子弹和地图的碰撞检测。1.先设计一个子弹类Bullet,如下所示:class Bullet : public CCSprite { public: Bullet(); ~Bullet(); static Bullet* ...
  • 高德地图基础功能使用心得

    千次阅读 2016-08-03 12:06:50
    个人感觉高德的sdk比百度的好用,而且出错概率也更小,如果用高德地图做一个简单的当前地点定位,不仅需要设置mapView控件,直接集成在activity里即可。而且还可以按照固定的刷新频率获得经纬度,以及当前所在的...
  • react native android 高德地图原生代码编写 版权声明:本文为博主原创文章,未经博主允许不得转载。 react native android 高德地图原生代码编写 android代码 MyAmapView 高德地图注意事项 代码 AMapViewManager ...
  • 2D横纵版与斜视角游戏地图开发原理

    千次阅读 2009-12-08 14:58:00
    一个学生问的问题,借机做了个文档。发到博客。     2D横纵版与斜视角游戏地图   开发原理         作者 Honghaier
  • mangos地图管理

    2015-03-04 16:22:25
    但一幅地图却并一定能确定一个场景,这是因为有副本的存在。在一个场景地图里, 还会分区域,比如东部王国里会有艾尔文森林区域、西部荒野区域等。   从wow客户端的adt及wdt数据里可以大致了解到地图相关数据...
  • 日前在公司负责的主要业务是gis开发相关,现在使用的是百度地图,百度地图相比高德地图总有些缓慢、卡顿、因此才想到了这个方案。实现一个自己的库,可以快速切换百度地图与高德地图。 思路 有了上面这个需求,我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,046
精华内容 2,018
关键字:

地图指针方向不动