登录
首页 » Java » android百度地图经典实例app源码

android百度地图经典实例app源码

于 2019-03-12 发布
0 104
下载积分: 1 下载次数: 3

代码说明:

百度地图Android SDK v4.3.1 Sample共有28个Demo,每个Demo的说明如下:-------------------------------------------------------------------------------------一、Demo名称:基本地图功能文件名:  BaseMapDemo.java简介:创建一张百度地图并管理地图的生命周期详述:(1)创建一张最简单的百度地图;(2)管理地图的生命周期,具体请参看代码部分的相关注释;(3)可监听地图加载完成事件;(4)给出示例个性化地图、普通地图动态切换-------------------------------------------------------------------------------------二、Demo名称:MapFragment使用文件名:  MapFragmentDemo.java简介:介绍在Fragment框架下使用地图详述:(1)介绍了如何在Fragment框架下添加一个地图地图控件;-------------------------------------------------------------------------------------三、Demo名称:图层展示功能文件名:  LayersDemo.java简介:展示普通图、卫星图、交通流量图和百度城市热力图详述:(1)选择展示地图的图层为普通图或卫星图;(2)在普通图或卫星图上叠加交通流量图;(3)在普通图或卫星图上叠加百度城市热力图;-------------------------------------------------------------------------------------四、Demo名称:多地图展示文件名:  MultiMapViewDemo.java简介:介绍多MapView的使用详述:(1)在一个界面内,同时建立四个MapView控件;(2)地图Logo位置变更,支持6个位置,多图展示中只展示了4个位置-------------------------------------------------------------------------------------五、Demo名称:地图操作功能文件名:  MapControlDemo.java简介:介绍平移和缩放地图,双指操作地图,监听地图点击事件详述:(1)介绍地图缩放级别、旋转度和俯视度的get和set方法;(2)监听单击和长按地图事件;(3)单击、双击和长按地图获取该点的经纬度坐标;(4)对地图显示内容进行截图,截图保存地址为:/mnt/sdcard/test.png;-------------------------------------------------------------------------------------六、Demo名称:UI控制功能文件名:  UISettingsDemo.java简介:介绍开关手势功能和显示隐藏UI控件详述:(1)地图操作开关:平移、缩放、双击放大、双指操作(旋转度和俯视度);(2)控件显示开关:显示/隐藏缩放按钮;(3)指南针位置控制:显示在地图左上角或者右上角(仅举例),开发者可据实际情况任意改变位置;(4)底图标注开关:控制显示/隐藏底图POI,隐藏POI可得到仅显示道路信息的地图(5)禁用所有手势:控制是否一并禁止所有手势。(6)设置地图setPadding,防止UI遮挡Logo等。-------------------------------------------------------------------------------------七、Demo名称:定位图层展示文件名:  LocationOverlayDemo.java简介:介绍定位图层的基本用法详述:(1)可自定义更换位置图标,精度圈填充及边框颜色;(2)支持定位三态效果显示(普通态、跟随态、罗盘态);(3)百度地图SDK从2.0.0版本起,将定位功能进行了分离,具体使用方法请见定位SDK;(4)定位SDK开发指南详见http://developer.baidu.com/map/geosdk-android.htm;(5)支持开发者自定义精度圈边框和填充区域的颜色。-------------------------------------------------------------------------------------八、Demo名称:自定义绘制功能文件名:  GeometryDemo.java简介:介绍自定义绘制点、线、多边形、圆等几何图形和文字详述:(1)支持绘制凸多边形,如要绘制凹多边形请用三角形进行拼接;(2)支持绘制文字;-------------------------------------------------------------------------------------九、Demo名称:覆盖物功能文件名:  OverlayDemo.java简介:介绍添加覆盖物并响应点击功能和弹出pop功能详述:(1)在popup中添加弹出自定义View的示例;(2)点击周围4个Marker,弹出popup,可更新marker位置和更新marker图标;(3)中间显示的为图片图层,该图层可随地图的移动、缩放等做出相应的操作;(4)支持Maker设置透明度的方法,利用滑动条可以展示maker透明度变化;(5)支持Marker设置动画的能力,包含两种方式:从地上生长和从天上落下-------------------------------------------------------------------------------------十、Demo名称:热力图功能文件名:  HeatMapDemo.java简介绘制自有数据热力图详述:(1)设置热力图颜色;(2)准备数据、生成热力图;(3)删除热力图;-------------------------------------------------------------------------------------十一、Demo名称:地理编码功能文件名:  GeoCodeDemo.java简介:介绍地址信息与坐标之间的相互转换详述:(1)正向地理编码:将地址信息转换为经纬度坐标;(2)反向地理编码:将经纬度坐标转换为地址信息;-------------------------------------------------------------------------------------十二、Demo名称:POI搜索功能文件名:  POISearchDemo.java简介:介绍关键词查询、suggestion查询和查看餐饮类Place详情页功能详述:(1)点击某些关键词查询后的结果(如“餐厅”)可跳转到Place详情页;(2)提供suggestion查询进行联想查询,例如输入“天安门”则会弹出联想查询的列表;-------------------------------------------------------------------------------------十三、Demo名称:路径规划功能文件名:  RoutePlanDemo.java, CustomRouteOverlay.java简介:介绍跨城交通、公交、驾车、步行、骑行五种线路规划方法和自设路线方法详述:(1)驾车查询新增路径点查询功能,具体使用方法详见开发者指南路径规划部分,只需重载接口;(2)自设路线功能演示开发者如何自己设定一条路线,包括如何设定起点、终点、途径站点和路段;(3)自设路线功能同时也介绍如何在两个Activity之间切换的时候管理Mapview的生命周期;(4)可自定义路线的起终点图标;----------------------------------------------------------------------------------十四、Demo名称:行政区域边界数据检索文件名称:DistrictSearchDemo.java简介:介绍如何使用行政区域边界数据检索功能,绘制行政区覆盖物和边框详述:(1)通过输入省、市、区/县的名称,绘制出行政区覆盖物和边框----------------------------------------------------------------------------------十五、Demo名称:公交线路查询功能文件名:  BusLineDemo.java简介:介绍查询公交线路功能(1)点击“开始”按钮可查询公交线路;(2)搜索出公交线路后点击“下一条”按钮可查询该线路的反方向公交线路;-------------------------------------------------------------------------------------十六、Demo名称:短串分享功能文件名:  ShareDemo.java简介:将POI点、反Geo点和公交/驾车/骑行/步行线路规划,生成短链接以分享给好友详述:(1)将POI点、反Geo点和公交/驾车/骑行/步行线路规划,生成短链接串,此链接可通过短信等形式分享给好友;(2)好友在终端设备点击此链接可快速打开Web地图、百度地图客户端进行信息展示;(3)暂时开放了“POI搜索结果分享”、“公交/驾车/骑行/步行线路规划”和“反向地理编码结果分享”;(4)日后会开放更多的功能,欢迎广大开发者使用短串分享功能;-------------------------------------------------------------------------------------十七、Demo名称:离线地图功能文件名:  OfflineDemo.java简介:介绍如何下载和使用离线地图详述:(1)可以搜索、下载、删除、查看离线地图;-------------------------------------------------------------------------------------十八、Demo名称:周边雷达功能--RadarDemo文件名:RadarDemo.java注意:需要把应用的key在官网的雷达注册页面进行相关的注册才能使用!注册网址:http://developer.baidu.com/map/index.php?title=radar简介:介绍如果使用周边雷达功能上传位置、检索周边的人详述:(1)获取位置信息并单次上传服务端;(2)获取位置信息连续上传服务端;(3)检索周边用户的位置;(4)用列表的形式及地图的形式展示周边用户的位置等信息;-------------------------------------------------------------------------------------十九、Demo名称:调启百度地图文件名:  OpenBaiduMap.java简介:介绍如果利用简单接口调用,开启百度地图客户端实现复杂逻辑业务详述:(1)调启百度地图导航(Native);(2)调启百度地图导航(Web);(3)调启百度地图POI周边检索;(4)调启百度地图POI详情检索;(5)调启百度地图步行线路规划;(6)调启百度地图驾车线路规划;(7)调启百度地图公交线路规划;(8)调启百度地图步行导航;(需百度地图App 8.6.6以上版本支持)(9)调启百度地图骑行导航(需百度地图App 8.6.6以上版本支持) (10) 调启百度地图poi点全景展示; (11) 调启百度地图步行AR导航;-------------------------------------------------------------------------------------二十、Demo名称:点收藏功能--FavoriteDemo文件名:FavoriteDemo.java简介:介绍如何创建、管理本地点数据详述:(1)新建本地点收藏;(2)查看已收藏本地点;(3)删除已收藏本地点;-------------------------------------------------------------------------------------二十一、Demo名称:LBS.云检索功能文件名:  CloudSearchDemo.java简介:介绍如何使用LBS.云检索用户自有数据注意:自v2.2.0起,SDK支持LBS云v2版的检索,使用v1版的用户请尽快完成升级或使用较低SDK版本。详述:(1)LBS.云是百度地图针对LBS开发者推出的平台级服务;(2)提供海量位置数据存储、检索、展示一体化解决方案;(3)该服务对开发者免费开放;(4)Demo中放入了测试用ak,开发者若使用自己的数据,请更换为自己的ak;(5)LBS.云检索使用方法请参考开发指南“LBS云服务”部分;(6)详细了解LBS.云,欢迎访问:http://developer.baidu.com/map/lbs-cloud.htm(7)申请ak及管理数据等问题,欢迎访问LBS开放平台官网:http://lbsyun.baidu.com/-------------------------------------------------------------------------------------二十二、Demo名称:OpenGL绘制功能文件名:  OpenGLDemo.java简介:介绍如何使用OpenGL在地图上实现自定义绘制详述:(1)利用OpenGL绘制基本折线;(2)利用OpenGL在地图上进行纹理绘制;-------------------------------------------------------------------------------------二十三、Demo名称:点聚合功能--MakerClusterDemo文件名:  MarkerClusterDemo.java简介:新增点聚合功能,可通过缩小地图层级,将定义范围内的多个标注点,聚合显示成一个标注点详述:(1)支持缩放地图,实现点聚合功能-------------------------------------------------------------------------------------二十四、Demo名称:瓦片图功能--TileOverlayDemo文件名:TileOverlayDemo.java简介:瓦片图层支持开发者添加自有瓦片数据,包括在线下载和本地加载两种方式。详述:(1)在线下载方式(2)本地加载方式(3)将地图类型设置为NONE,不下载地图底图瓦片(4)控制了地图显示范围,仅显示设置范围内的地图-------------------------------------------------------------------------------------二十五、Demo名称:地图由TextureView渲染文件名:TextureMapViewDemo.java使用前提:Android 4.0以上系统,并开启强制GPU渲染简介:新增了TextureMapView类,实现地图由TextureView渲染。解决原MapView基于系统GLSurfaceView导致在TabHost和scrollView中等闪黑屏、白边、压盖等问题。-------------------------------------------------------------------------------------二十六、Demo名称: 室内图--IndoorMapDemo文件名称: IndoorMapDemo.java简介:介绍如何进行室内图展示及室内路线规划详述:    (1)室内图展示,包含打开、关闭室内图方法    (2)室内路线规划(只支持起终点在同一建筑物内),绘制室内规划路线----------------------------------------------------------------------------------二十七、Demo名称: 室内图检索文件名称: IndoorSearchDemo.java简介:介绍在室内图中进行室内poi检索----------------------------------------------------------------------------------二十八、Demo名称: 小车轨迹平滑移动文件名称: TrackShowDemo.java简介:介绍小车轨迹平滑移动的实现----------------------------------------------------------------------------------

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • android视频录制(支持闪光灯以及前置后置摄像头拍摄) 实例源码下载
    支持闪光灯、前置、后置摄像头拍摄,有预览功能,非常不错
    2015-03-06下载
    积分:1
  • android 省市区三级联动效果
    android 省市区三级联动效果
    2014-05-30下载
    积分:1
  • android 360度全景查看 实例源码下载
    android 360度全景查看 实例源码下载
    2015-03-08下载
    积分:1
  • Android ExpandableList 例子下载 列表
    Android ExpandableList 例子下载 列表
    2013-08-14下载
    积分:1
  • android 自定义Switch控件 例子源码下载(兼容低版本)
    兼容android低版本
    2015-04-15下载
    积分:1
  • 动态添加控件--超出导航屏幕
    动态添加控件--超出导航屏幕
    2015-04-22下载
    积分:1
  • android 身份证验证功能 示例源码下载
    android 身份证验证功能 示例源码下载
    2014-09-11下载
    积分:1
  • BidirSlidingLayout_Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效
    BidirSlidingLayout_Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效package com.example.bidirslidinglayout;import android.content.Context;import android.os.AsyncTask;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.VelocityTracker;import android.view.View;import android.view.ViewConfiguration;import android.view.View.OnTouchListener;import android.view.WindowManager;import android.widget.RelativeLayout;/** * 双向滑动菜单框架 * * @author guolin */public class BidirSlidingLayout extends RelativeLayout implements OnTouchListener { /** * 滚动显示和隐藏左侧布局时,手指滑动需要达到的速度。 */ public static final int SNAP_VELOCITY = 200; /** * 滑动状态的一种,表示未进行任何滑动。 */ public static final int DO_NOTHING = 0; /** * 滑动状态的一种,表示正在滑出左侧菜单。 */ public static final int SHOW_LEFT_MENU = 1; /** * 滑动状态的一种,表示正在滑出右侧菜单。 */ public static final int SHOW_RIGHT_MENU = 2; /** * 滑动状态的一种,表示正在隐藏左侧菜单。 */ public static final int HIDE_LEFT_MENU = 3; /** * 滑动状态的一种,表示正在隐藏右侧菜单。 */ public static final int HIDE_RIGHT_MENU = 4; /** * 记录当前的滑动状态 */ private int slideState; /** * 屏幕宽度值。 */ private int screenWidth; /** * 在被判定为滚动之前用户手指可以移动的最大值。 */ private int touchSlop; /** * 记录手指按下时的横坐标。 */ private float xDown; /** * 记录手指按下时的纵坐标。 */ private float yDown; /** * 记录手指移动时的横坐标。 */ private float xMove; /** * 记录手指移动时的纵坐标。 */ private float yMove; /** * 记录手机抬起时的横坐标。 */ private float xUp; /** * 左侧菜单当前是显示还是隐藏。只有完全显示或隐藏时才会更改此值,滑动过程中此值无效。 */ private boolean isLeftMenuVisible; /** * 右侧菜单当前是显示还是隐藏。只有完全显示或隐藏时才会更改此值,滑动过程中此值无效。 */ private boolean isRightMenuVisible; /** * 是否正在滑动。 */ private boolean isSliding; /** * 左侧菜单布局对象。 */ private View leftMenuLayout; /** * 右侧菜单布局对象。 */ private View rightMenuLayout; /** * 内容布局对象。 */ private View contentLayout; /** * 用于监听滑动事件的View。 */ private View mBindView; /** * 左侧菜单布局的参数。 */ private MarginLayoutParams leftMenuLayoutParams; /** * 右侧菜单布局的参数。 */ private MarginLayoutParams rightMenuLayoutParams; /** * 内容布局的参数。 */ private RelativeLayout.LayoutParams contentLayoutParams; /** * 用于计算手指滑动的速度。 */ private VelocityTracker mVelocityTracker; /** * 重写BidirSlidingLayout的构造函数,其中获取了屏幕的宽度和touchSlop的值。 * * @param context * @param attrs */ public BidirSlidingLayout(Context context, AttributeSet attrs) { super(context, attrs); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); screenWidth = wm.getDefaultDisplay().getWidth(); touchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } /** * 绑定监听滑动事件的View。 * * @param bindView * 需要绑定的View对象。 */ public void setScrollEvent(View bindView) { mBindView = bindView; mBindView.setOnTouchListener(this); } /** * 将界面滚动到左侧菜单界面,滚动速度设定为-30. */ public void scrollToLeftMenu() { new LeftMenuScrollTask().execute(-30); } /** * 将界面滚动到右侧菜单界面,滚动速度设定为-30. */ public void scrollToRightMenu() { new RightMenuScrollTask().execute(-30); } /** * 将界面从左侧菜单滚动到内容界面,滚动速度设定为30. */ public void scrollToContentFromLeftMenu() { new LeftMenuScrollTask().execute(30); } /** * 将界面从右侧菜单滚动到内容界面,滚动速度设定为30. */ public void scrollToContentFromRightMenu() { new RightMenuScrollTask().execute(30); } /** * 左侧菜单是否完全显示出来,滑动过程中此值无效。 * * @return 左侧菜单完全显示返回true,否则返回false。 */ public boolean isLeftLayoutVisible() { return isLeftMenuVisible; } /** * 右侧菜单是否完全显示出来,滑动过程中此值无效。 * * @return 右侧菜单完全显示返回true,否则返回false。 */ public boolean isRightLayoutVisible() { return isRightMenuVisible; } /** * 在onLayout中重新设定左侧菜单、右侧菜单、以及内容布局的参数。 */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (changed) { // 获取左侧菜单布局对象 leftMenuLayout = getChildAt(0); leftMenuLayoutParams = (MarginLayoutParams) leftMenuLayout.getLayoutParams(); // 获取右侧菜单布局对象 rightMenuLayout = getChildAt(1); rightMenuLayoutParams = (MarginLayoutParams) rightMenuLayout.getLayoutParams(); // 获取内容布局对象 contentLayout = getChildAt(2); contentLayoutParams = (RelativeLayout.LayoutParams) contentLayout.getLayoutParams(); contentLayoutParams.width = screenWidth; contentLayout.setLayoutParams(contentLayoutParams); } } @Override public boolean onTouch(View v, MotionEvent event) { createVelocityTracker(event); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 手指按下时,记录按下时的坐标 xDown = event.getRawX(); yDown = event.getRawY(); // 将滑动状态初始化为DO_NOTHING slideState = DO_NOTHING; break; case MotionEvent.ACTION_MOVE: xMove = event.getRawX(); yMove = event.getRawY(); // 手指移动时,对比按下时的坐标,计算出移动的距离。 int moveDistanceX = (int) (xMove - xDown); int moveDistanceY = (int) (yMove - yDown); // 检查当前的滑动状态 checkSlideState(moveDistanceX, moveDistanceY); // 根据当前滑动状态决定如何偏移内容布局 switch (slideState) { case SHOW_LEFT_MENU: contentLayoutParams.rightMargin = -moveDistanceX; checkLeftMenuBorder(); contentLayout.setLayoutParams(contentLayoutParams); break; case HIDE_LEFT_MENU: contentLayoutParams.rightMargin = -leftMenuLayoutParams.width - moveDistanceX; checkLeftMenuBorder(); contentLayout.setLayoutParams(contentLayoutParams); case SHOW_RIGHT_MENU: contentLayoutParams.leftMargin = moveDistanceX; checkRightMenuBorder(); contentLayout.setLayoutParams(contentLayoutParams); break; case HIDE_RIGHT_MENU: contentLayoutParams.leftMargin = -rightMenuLayoutParams.width moveDistanceX; checkRightMenuBorder(); contentLayout.setLayoutParams(contentLayoutParams); default: break; } break; case MotionEvent.ACTION_UP: xUp = event.getRawX(); int upDistanceX = (int) (xUp - xDown); if (isSliding) { // 手指抬起时,进行判断当前手势的意图 switch (slideState) { case SHOW_LEFT_MENU: if (shouldScrollToLeftMenu()) { scrollToLeftMenu(); } else { scrollToContentFromLeftMenu(); } break; case HIDE_LEFT_MENU: if (shouldScrollToContentFromLeftMenu()) { scrollToContentFromLeftMenu(); } else { scrollToLeftMenu(); } break; case SHOW_RIGHT_MENU: if (shouldScrollToRightMenu()) { scrollToRightMenu(); } else { scrollToContentFromRightMenu(); } break; case HIDE_RIGHT_MENU: if (shouldScrollToContentFromRightMenu()) { scrollToContentFromRightMenu(); } else { scrollToRightMenu(); } break; default: break; } } else if (upDistanceX < touchSlop && isLeftMenuVisible) { // 当左侧菜单显示时,如果用户点击一下内容部分,则直接滚动到内容界面 scrollToContentFromLeftMenu(); } else if (upDistanceX < touchSlop && isRightMenuVisible) { // 当右侧菜单显示时,如果用户点击一下内容部分,则直接滚动到内容界面 scrollToContentFromRightMenu(); } recycleVelocityTracker(); break; } if (v.isEnabled()) { if (isSliding) { // 正在滑动时让控件得不到焦点 unFocusBindView(); return true; } if (isLeftMenuVisible || isRightMenuVisible) { // 当左侧或右侧布局显示时,将绑定控件的事件屏蔽掉 return true; } return false; } return true; } /** * 根据手指移动的距离,判断当前用户的滑动意图,然后给slideState赋值成相应的滑动状态值。 * * @param moveDistanceX * 横向移动的距离 * @param moveDistanceY * 纵向移动的距离 */ private void checkSlideState(int moveDistanceX, int moveDistanceY) { if (isLeftMenuVisible) { if (!isSliding && Math.abs(moveDistanceX) >= touchSlop && moveDistanceX < 0) { isSliding = true; slideState = HIDE_LEFT_MENU; } } else if (isRightMenuVisible) { if (!isSliding && Math.abs(moveDistanceX) >= touchSlop && moveDistanceX > 0) { isSliding = true; slideState = HIDE_RIGHT_MENU; } } else { if (!isSliding && Math.abs(moveDistanceX) >= touchSlop && moveDistanceX > 0 && Math.abs(moveDistanceY) < touchSlop) { isSliding = true; slideState = SHOW_LEFT_MENU; contentLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0); contentLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); contentLayout.setLayoutParams(contentLayoutParams); // 如果用户想要滑动左侧菜单,将左侧菜单显示,右侧菜单隐藏 leftMenuLayout.setVisibility(View.VISIBLE); rightMenuLayout.setVisibility(View.GONE); } else if (!isSliding && Math.abs(moveDistanceX) >= touchSlop && moveDistanceX < 0 && Math.abs(moveDistanceY) < touchSlop) { isSliding = true; slideState = SHOW_RIGHT_MENU; contentLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0); contentLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); contentLayout.setLayoutParams(contentLayoutParams); // 如果用户想要滑动右侧菜单,将右侧菜单显示,左侧菜单隐藏 rightMenuLayout.setVisibility(View.VISIBLE); leftMenuLayout.setVisibility(View.GONE); } } } /** * 在滑动过程中检查左侧菜单的边界值,防止绑定布局滑出屏幕。 */ private void checkLeftMenuBorder() { if (contentLayoutParams.rightMargin > 0) { contentLayoutParams.rightMargin = 0; } else if (contentLayoutParams.rightMargin < -leftMenuLayoutParams.width) { contentLayoutParams.rightMargin = -leftMenuLayoutParams.width; } } /** * 在滑动过程中检查右侧菜单的边界值,防止绑定布局滑出屏幕。 */ private void checkRightMenuBorder() { if (contentLayoutParams.leftMargin > 0) { contentLayoutParams.leftMargin = 0; } else if (contentLayoutParams.leftMargin < -rightMenuLayoutParams.width) { contentLayoutParams.leftMargin = -rightMenuLayoutParams.width; } } /** * 判断是否应该滚动将左侧菜单展示出来。如果手指移动距离大于左侧菜单宽度的1/2,或者手指移动速度大于SNAP_VELOCITY, * 就认为应该滚动将左侧菜单展示出来。 * * @return 如果应该将左侧菜单展示出来返回true,否则返回false。 */ private boolean shouldScrollToLeftMenu() { return xUp - xDown > leftMenuLayoutParams.width / 2 || getScrollVelocity() > SNAP_VELOCITY; } /** * 判断是否应该滚动将右侧菜单展示出来。如果手指移动距离大于右侧菜单宽度的1/2,或者手指移动速度大于SNAP_VELOCITY, * 就认为应该滚动将右侧菜单展示出来。 * * @return 如果应该将右侧菜单展示出来返回true,否则返回false。 */ private boolean shouldScrollToRightMenu() { return xDown - xUp > rightMenuLayoutParams.width / 2 || getScrollVelocity() > SNAP_VELOCITY; } /** * 判断是否应该从左侧菜单滚动到内容布局,如果手指移动距离大于左侧菜单宽度的1/2,或者手指移动速度大于SNAP_VELOCITY, * 就认为应该从左侧菜单滚动到内容布局。 * * @return 如果应该从左侧菜单滚动到内容布局返回true,否则返回false。 */ private boolean shouldScrollToContentFromLeftMenu() { return xDown - xUp > leftMenuLayoutParams.width / 2 || getScrollVelocity() > SNAP_VELOCITY; } /** * 判断是否应该从右侧菜单滚动到内容布局,如果手指移动距离大于右侧菜单宽度的1/2,或者手指移动速度大于SNAP_VELOCITY, * 就认为应该从右侧菜单滚动到内容布局。 * * @return 如果应该从右侧菜单滚动到内容布局返回true,否则返回false。 */ private boolean shouldScrollToContentFromRightMenu() { return xUp - xDown > rightMenuLayoutParams.width / 2 || getScrollVelocity() > SNAP_VELOCITY; } /** * 创建VelocityTracker对象,并将触摸事件加入到VelocityTracker当中。 * * @param event * 右侧布局监听控件的滑动事件 */ private void createVelocityTracker(MotionEvent event) { if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(event); } /** * 获取手指在绑定布局上的滑动速度。 * * @return 滑动速度,以每秒钟移动了多少像素值为单位。 */ private int getScrollVelocity() { mVelocityTracker.computeCurrentVelocity(1000); int velocity = (int) mVelocityTracker.getXVelocity(); return Math.abs(velocity); } /** * 回收VelocityTracker对象。 */ private void recycleVelocityTracker() { mVelocityTracker.recycle(); mVelocityTracker = null; } /** * 使用可以获得焦点的控件在滑动的时候失去焦点。 */ private void unFocusBindView() { if (mBindView != null) { mBindView.setPressed(false); mBindView.setFocusable(false); mBindView.setFocusableInTouchMode(false); } } class LeftMenuScrollTask extends AsyncTask { @Override protected Integer doInBackground(Integer... speed) { int rightMargin = contentLayoutParams.rightMargin; // 根据传入的速度来滚动界面,当滚动到达边界值时,跳出循环。 while (true) { rightMargin = rightMargin speed[0]; if (rightMargin < -leftMenuLayoutParams.width) { rightMargin = -leftMenuLayoutParams.width; break; } if (rightMargin > 0) { rightMargin = 0; break; } publishProgress(rightMargin); // 为了要有滚动效果产生,每次循环使线程睡眠一段时间,这样肉眼才能够看到滚动动画。 sleep(15); } if (speed[0] > 0) { isLeftMenuVisible = false; } else { isLeftMenuVisible = true; } isSliding = false; return rightMargin; } @Override protected void onProgressUpdate(Integer... rightMargin) { contentLayoutParams.rightMargin = rightMargin[0]; contentLayout.setLayoutParams(contentLayoutParams); unFocusBindView(); } @Override protected void onPostExecute(Integer rightMargin) { contentLayoutParams.rightMargin = rightMargin; contentLayout.setLayoutParams(contentLayoutParams); } } class RightMenuScrollTask extends AsyncTask { @Override protected Integer doInBackground(Integer... speed) { int leftMargin = contentLayoutParams.leftMargin; // 根据传入的速度来滚动界面,当滚动到达边界值时,跳出循环。 while (true) { leftMargin = leftMargin speed[0]; if (leftMargin < -rightMenuLayoutParams.width) { leftMargin = -rightMenuLayoutParams.width; break; } if (leftMargin > 0) { leftMargin = 0; break; } publishProgress(leftMargin); // 为了要有滚动效果产生,每次循环使线程睡眠一段时间,这样肉眼才能够看到滚动动画。 sleep(15); } if (speed[0] > 0) { isRightMenuVisible = false; } else { isRightMenuVisible = true; } isSliding = false; return leftMargin; } @Override protected void onProgressUpdate(Integer... leftMargin) { contentLayoutParams.leftMargin = leftMargin[0]; contentLayout.setLayoutParams(contentLayoutParams); unFocusBindView(); } @Override protected void onPostExecute(Integer leftMargin) { contentLayoutParams.leftMargin = leftMargin; contentLayout.setLayoutParams(contentLayoutParams); } } /** * 使当前线程睡眠指定的毫秒数。 * * @param millis * 指定当前线程睡眠多久,以毫秒为单位 */ private void sleep(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { e.printStackTrace(); } }}  
    2014-04-10下载
    积分:1
  • android 沈阳公交源码(地图 导航)
    android 沈阳公交源码(地图 导航)
    2015-07-04下载
    积分:1
  • android 小米便签例子源码下载
    android 小米便签例子源码下载
    2015-04-08下载
    积分:1
  • 696518资源总数
  • 104269会员总数
  • 42今日下载