实现MapFragment(一)
来源:互联网 发布:有mac版本的网游 编辑:程序博客网 时间:2024/05/20 15:40
本文内容为原创,转载者请注明原始作者以及原始出处,以避免版权纠纷!
做地图应用时,我们都知道MapView只能在MapActivity中显示。
从Android SDK3.0开始,Android Framework增加了一个轻量级的组件:Fragment。它非常方便的解决了频繁的切换Activity而导致的用户体验差的问题。但是,要使用Fragment,有很多的限制。首先要求Android SDK3.0以上,其次要求Activity必须继承自FragmentActivity。
有这样一种需求:在开发一款Map应用时,首先为了兼容更多的机型,要求在Android SDK2.1上开发;其次为了得到更好的用户体验,想要将MapView置于Fragment以得到更友好的UI切换效果。
这个问题的难点有两处:第一是要Android SDK 2.1基础上实现Fragment;第二就是要在Fragment中显示地图。
第一个问题其实很容易解决。相信不少人都知道Android compatibility这个兼容包的存在。是的,Android compatibility包里面就有FragmentActivity和Fragment这套东西。它有两个版本v4和v13,其中v4就支持支持从android sdk1.6开始,可以使用Fragment。Android compatibility包是一个静态的jar包,我们只需要将它置于工程中,导入进工程,就能很方便的引用到FragmentActivity和Fragment了。
第二个问题比较棘手。我们要使用Fragmen即必须继承FragmentActivity;要使用MapView就必须继承MapActivity。由于Java语言跟C++语言不同,它是单继承的,不可能同时继承FragmentActivity和MapActivity的。
有人可能很快的想到了一种方案:就是让FragmentActivity继承自MapActivity或者让MapActivity继承自FragmentActivity,问题不就解决了么?
是的,这确实是一种可能的方案,并且有人去实践成功了。虽然FragmentActivity和MapActivity都是Google在Android Framework之外提供的开发包。但是FragmentActivity和MapActivity不同,它也是开源的。而MapActivity是Google公司的核心技术,它是封闭。
于是,一位叫Pete Doyle的大牛人拿着Android compatibility包的源码,重新写过。他让FragmentActivity不是继承自Activity,而是继承自MapActivity,并且将这个修改过的Android compatibility包发布出来。这样只要你使用他的包,就自然在能在Fragment中使用MapView了。下面就是这位大牛人的工程的下载地址:
https://github.com/petedoyle/android-support-v4-googlemaps
不过,使用这种方案,也有些弊端。毕竟修改Android compatibility包不是官方正式行为,在此我并无冒犯这位大牛人的意思(事实上我很崇拜他)。还有就是Android compatibility包(无论是v4还是v13)都是在持续更新的。因此修改过的compatibility包肯定在更新上要比Google官方的慢半拍。
事实上,还有一种解决方案,我会在下次中细讲,敬请关注。
从Android SDK3.0开始,Android Framework增加了一个轻量级的组件:Fragment。它非常方便的解决了频繁的切换Activity而导致的用户体验差的问题。但是,要使用Fragment,有很多的限制。首先要求Android SDK3.0以上,其次要求Activity必须继承自FragmentActivity。
有这样一种需求:在开发一款Map应用时,首先为了兼容更多的机型,要求在Android SDK2.1上开发;其次为了得到更好的用户体验,想要将MapView置于Fragment以得到更友好的UI切换效果。
这个问题的难点有两处:第一是要Android SDK 2.1基础上实现Fragment;第二就是要在Fragment中显示地图。
第一个问题其实很容易解决。相信不少人都知道Android compatibility这个兼容包的存在。是的,Android compatibility包里面就有FragmentActivity和Fragment这套东西。它有两个版本v4和v13,其中v4就支持支持从android sdk1.6开始,可以使用Fragment。Android compatibility包是一个静态的jar包,我们只需要将它置于工程中,导入进工程,就能很方便的引用到FragmentActivity和Fragment了。
第二个问题比较棘手。我们要使用Fragmen即必须继承FragmentActivity;要使用MapView就必须继承MapActivity。由于Java语言跟C++语言不同,它是单继承的,不可能同时继承FragmentActivity和MapActivity的。
有人可能很快的想到了一种方案:就是让FragmentActivity继承自MapActivity或者让MapActivity继承自FragmentActivity,问题不就解决了么?
是的,这确实是一种可能的方案,并且有人去实践成功了。虽然FragmentActivity和MapActivity都是Google在Android Framework之外提供的开发包。但是FragmentActivity和MapActivity不同,它也是开源的。而MapActivity是Google公司的核心技术,它是封闭。
于是,一位叫Pete Doyle的大牛人拿着Android compatibility包的源码,重新写过。他让FragmentActivity不是继承自Activity,而是继承自MapActivity,并且将这个修改过的Android compatibility包发布出来。这样只要你使用他的包,就自然在能在Fragment中使用MapView了。下面就是这位大牛人的工程的下载地址:
https://github.com/petedoyle/android-support-v4-googlemaps
不过,使用这种方案,也有些弊端。毕竟修改Android compatibility包不是官方正式行为,在此我并无冒犯这位大牛人的意思(事实上我很崇拜他)。还有就是Android compatibility包(无论是v4还是v13)都是在持续更新的。因此修改过的compatibility包肯定在更新上要比Google官方的慢半拍。
事实上,还有一种解决方案,我会在下次中细讲,敬请关注。
- 实现MapFragment(一)
- 实现MapFragment(二)
- 实现MapFragment
- 【Tech-Android-View】Android中引入MapFragment SupporMapFragment GoogleMap(2)
- BaiduMap---百度地图官方Demo之MapFragment使用(创建一个基于Fragment的地图框架)
- google地图 MapFragment
- Android Map 新用法:MapFragment
- 实现Action(一)
- 实现组件(一)
- 算法实现(一)
- GPIOLIB实现(一)
- 人事管理系统实现(一)
- retrofit实现(一)
- 【Tech-Android-View】Android中引入MapFragment SupporMapFragment GoogleMap
- 一、tftp升级实现说明(一)
- 分页实现(一) Mysql实现
- C++ 实现DLL注入(一)实现
- SVM算法实现(一)
- WinForm 创建与读写配置文件
- Linux 设置oracle1521端口
- RFC简介
- ocp听课总结之1——课程简介
- 一个 SQL 同时验证帐号是否存在、密码是否正确
- 实现MapFragment(一)
- 铁道部网络购票网站存在的一个大问题----一个大大的事务!!!
- linux python守护进程编写
- 实现MapFragment(二)
- 并查集
- 【DuiLib入门基础】九宫格corner属性详细解释
- Qt 中打开玻璃化DWM效果
- 开发人员本身是90分的测试人员
- 寒假总结