Android仿微信调用第三方地图应用导航(高德、百度、腾讯)

实现目标

先来一张微信功能截图看看要做什么

其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航。

大脑动一下,要实现这个功能应该大体分成两步:

  • 底部弹出可选的地图菜单进行展示
  • 点击具体菜单某一项的时候调用对应地图的api进行导航就ok啦

底部菜单这里用PopupWindow来做。

实现

1、菜单显示

PopupWindow支持传入view进行弹出展示,所有我们直接写一个菜单布局,高德、百度、腾讯 再加一个取消。

map_navagation_sheet.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical">

  <Button
      android:id="@+id/baidu_btn"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/ulz_white_selector"
      android:text="百度地图"/>
  <include layout="@layout/common_line_view"/>

  <Button
      android:id="@+id/gaode_btn"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/ulz_white_selector"
      android:text="高德地图"/>
  <include layout="@layout/common_line_view"/>
  <Button
    android:id="@+id/tencent_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/ulz_white_selector"
    android:text="腾讯地图"/>
  <include layout="@layout/common_line_view"/>
  <Button
      android:id="@+id/cancel_btn2"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/ulz_white_selector"
      android:text="取消"/>
</LinearLayout>

这里为了显示效果,自己写了个PopupWindow的子类,一般你直接用PopupWindow就可以了。

然后在需要调用的地方显示PopupWindow

mapSheetView = LayoutInflater.from(this).inflate(R.layout.map_navagation_sheet, null);

mBottomSheetPop = new BottomSheetPop(this);
        mBottomSheetPop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        mBottomSheetPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        mBottomSheetPop.setContentView(mapSheetView);
        mBottomSheetPop.setBackgroundDrawable(new ColorDrawable(0x00000000));
        mBottomSheetPop.setOutsideTouchable(true);
        mBottomSheetPop.setFocusable(true);
        mBottomSheetPop.showAtLocation(this.getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);

2、点击每个菜单调用对用地图的导航api

这个每个地图的官网都会有介绍,你只需要把目的地名称,经纬度信息传过去就好了,没什么多说的,直接贴代码。

@Override
  public void onClick(View view) {
    switch (view.getId()) {
      case R.id.navigation_btn:
        mBottomSheetPop = new BottomSheetPop(this);
        mBottomSheetPop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        mBottomSheetPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        mBottomSheetPop.setContentView(mapSheetView);
        mBottomSheetPop.setBackgroundDrawable(new ColorDrawable(0x00000000));
        mBottomSheetPop.setOutsideTouchable(true);
        mBottomSheetPop.setFocusable(true);
        mBottomSheetPop.showAtLocation(this.getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
        break;
      case R.id.cancel_btn2:
        if (mBottomSheetPop != null) {
          mBottomSheetPop.dismiss();
        }
        break;
      case R.id.baidu_btn:
        if (isAvilible(this, "com.baidu.BaiduMap")) {//传入指定应用包名
          try {
            Intent intent = Intent.getIntent("intent://map/direction?" +
                "destination=latlng:" + mInfo.getLat() + "," + mInfo.getLng() + "|name:我的目的地" +    //终点
                "&mode=driving&" +     //导航路线方式
                "&src=appname#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
            startActivity(intent); //启动调用
          } catch (URISyntaxException e) {
            Log.e("intent", e.getMessage());
          }
        } else {//未安装
          //market为路径,id为包名
          //显示手机上所有的market商店
          Toast.makeText(this, "您尚未安装百度地图", Toast.LENGTH_LONG).show();
          Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");
          Intent intent = new Intent(Intent.ACTION_VIEW, uri);
          if (intent.resolveActivity(getPackageManager()) != null){
            startActivity(intent);
          }
        }
        mBottomSheetPop.dismiss();
        break;
      case R.id.gaode_btn:
        if (isAvilible(this, "com.autonavi.minimap")) {
          Intent intent = new Intent();
          intent.setAction(Intent.ACTION_VIEW);
          intent.addCategory(Intent.CATEGORY_DEFAULT);

          //将功能Scheme以URI的方式传入data
          Uri uri = Uri.parse("androidamap://navi?sourceApplication=appname&poiname=fangheng&lat=" + mInfo.getLat() + "&lon=" + mInfo.getLng() + "&dev=1&style=2");
          intent.setData(uri);

          //启动该页面即可
          startActivity(intent);
        } else {
          Toast.makeText(this, "您尚未安装高德地图", Toast.LENGTH_LONG).show();
          Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");
          Intent intent = new Intent(Intent.ACTION_VIEW, uri);
          if (intent.resolveActivity(getPackageManager()) != null){
            startActivity(intent);
          }
        }
        mBottomSheetPop.dismiss();
        break;
      case R.id.tencent_btn:
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_DEFAULT);

        //将功能Scheme以URI的方式传入data
        Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&to=我的目的地&tocoord=" + mInfo.getLat() + "," + mInfo.getLng());
        intent.setData(uri);
        if (intent.resolveActivity(getPackageManager()) != null) {
          //启动该页面即可
          startActivity(intent);
        } else {
          Toast.makeText(this, "您尚未安装腾讯地图", Toast.LENGTH_LONG).show();
        }
        mBottomSheetPop.dismiss();
        break;
    }
  }

效果图

贴一下效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android高德地图poi检索仿微信发送位置实例代码

    最近项目需求把发送定位模块改成类似微信发送位置给好友的效果,我使用了高德地图实现了一个demo,效果图如下: 从主界面中我们可以看到中心标记上面显示的就是我们定位的地址,下面是一个listview列表,第一条item的数据就是我们定位得到的地址,下面其余的都是我们根据定位得到的经纬度通过poi周边搜索得到的地址.我们进行了如下操作: 我们点击列表的item,中心标记会移动到该item对象的地址上面去. 我们手动移动地图的时候,中心标记的地址会发生相应的变化并且下面的列表也会发生相应的变化. 根据

  • [Android] 通过GridView仿微信动态添加本地图片示例代码

    前面文章讲述的都是"随手拍"中图像处理的操作,此篇文章主要讲述GridView控件实现添加本地图片并显示.主要是关于GridView控件的基本操作,通常可以通过自定义继承BaseAdapter的适配器加载图片,而下面讲述的不是自定义的适配器,而是调用SimpleAdapter实现的.至于上传发布与网络交互此处不讲述,后面文章会讲! 一. 实现效果 主要是通过点击+从本地相册中添加图片,同时显示图片至GridView.点击图片可以进行删除操作,同时界面中的发布EditView控件也很好看

  • Android仿微信调用第三方地图应用导航(高德、百度、腾讯)

    实现目标 先来一张微信功能截图看看要做什么 其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航. 大脑动一下,要实现这个功能应该大体分成两步: 底部弹出可选的地图菜单进行展示 点击具体菜单某一项的时候调用对应地图的api进行导航就ok啦 底部菜单这里用PopupWindow来做. 实现 1.菜单显示 PopupWindow支持传入view进行弹出展示,所有我们直接写一个菜单布局,高德.百度.腾讯 再加一个取消. map_navagation_sheet.xml <?xml versi

  • Android仿微信之界面导航篇(1)

    微信是现在比较流行的应用了,在各大安卓市场几乎都是名列前茅了. 说实话不得不羡慕腾讯庞大的用户群体,只要腾讯敢做,就会有很多人去用. 废话不多说,下面就开始说一下如何实现微信的第一次启动程序的用户导航,ViewPager相信大家都不陌生了,是google放出的一个安卓低版本的兼容包android-support-v4.jar,里面有很多类我们可以去使用.那这个导航就是使用这个类来辅助完成的,在每一个View里放置一个图片,当我们使用ViewPager滑动界面的时候,就会看到一张张图片,从而实现这

  • Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏的设置方法类似于TabLayout的关联,View需要创建关联方法,用来关联VIewPager; 3. 通过关联方法获取ViewPager实例后,根据ViewPager页面数创建底部导航栏的图标按钮; 代码实现: 1. 新建第一个自定义View, 图标 + 文字 的底部按钮; /** * 自定义控件

  • Android仿微信5实现滑动导航条

    本文实例为大家分享了Android 仿微信5滑动导航效果,供大家参考,具体内容如下 ViewPageAdapter.java package com.rong; import java.util.ArrayList; import java.util.List; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; publi

  • Android仿微信页面底部导航效果代码实现

    大家在参考本地代码的时候要根据需要适当的修改,里面有冗余代码小编没有删除.好了,废话不多说了,一切让代码说话吧! 关键代码如下所示: .java里面的主要代码 public class MainActivity extends BaseActivity implements TabChangeListener { private Fragment[] fragments; private FragZaiXianYuYue fragZaiXianYuYue; private FragDaoLuJi

  • Android 仿微信底部渐变Tab效果

    先来看一下效果图 除了第三个的发现Tab有所差别外,其他的基本还原了微信的底部Tab渐变效果 每个Tab都是一个自定义View,根据ImageView的tint属性来实现颜色渐变效果,tint属性的使用可以看我的上一篇文章 我将自定义View命名为ShadeView,包含四个自定义属性 意思分别为图标.背景色.底部文本.底部文本大小 <declare-styleable name="ShadeView"> <attr name="icon" for

  • Android仿微信底部菜单栏功能显示未读消息数量

    底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏,这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用). 先看一下做出来之后的效果: 以后使用的时候就可以换成自己项目的图片和字体了,主框架不用变哈哈, 首先是要布局layout下xml文件 main.xml: <?xml version="1.0" encoding=&qu

  • Android仿微信图片点击全屏效果

    废话不多说,先看下效果: 先是微信的 再是模仿的 先说下实现原理,再一步步分析 这里总共有2个Activity一个就是主页,一个就是显示我们图片效果的页面,参数通过Intent传送,素材内容均来自网络,(感谢聪明的蘑菇) 图片都是Glide异步下的,下的,下的重要的事情说三次,然后就是用动画做放大操作然后显示出来了(并没有做下载原图的实现,反正也是一样 下载下来Set上去而且动画都不需要更简便). OK,我们来看分析下 obj,目录下分别创建了2个对象,一个用来使用来处理显示页面的图片尺寸信息以

  • Android仿微信底部按钮滑动变色

    Android仿微信底部按钮滑动变色,这里只针对使用Fragment为Tab页的滑动操作,进行简单的变色讲解. 首先说下OnPageChangeListener这个监听 //这个监听有三个方法 public abstract void onPageScrollStateChanged (int state) public abstract void onPageScrolled (int position, float positionOffset, int positionOffsetPixe

  • Android仿微信QQ设置图形头像裁剪功能

    最近在做毕业设计,想有一个功能和QQ一样可以裁剪头像并设置圆形头像,额,这是设计狮的一种潮流. 而纵观现在主流的APP,只要有用户系统这个功能,这个需求一般都是在(bu)劫(de)难(bu)逃(xue)! 图片裁剪实现方式有两种,一种是利用系统自带的裁剪工具,一种是使用开源工具Cropper.本节就为大家带来如何使用系统自带的裁剪工具进行图片裁剪~ 还是先来个简单的运行图. 额,简单说下,我待会会把代码写成小demo分享给大家,在文章末尾会附上github链接,需要的可以自行下载~ 下面来简单分

随机推荐