如何获取alasset 文件路径的有效路径

15986人阅读
@话不多说,直接上代码
& & & @但是:
& & &&按照上面方法直接取出来的路径是无法传输的,必须自己转化成NSData对象重新写入沙盒路径
@转载请标注:转自& &谢谢!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:999185次
积分:10190
积分:10190
排名:第1047名
原创:159篇
转载:209篇
评论:133条
(2)(2)(3)(2)(10)(1)(1)(1)(3)(1)(1)(7)(8)(7)(7)(1)(1)(14)(14)(2)(1)(8)(51)(6)(3)(11)(23)(25)(14)(7)(29)(24)(25)(20)(27)(9)如何获取ALAsset的有效路径_百度知道
如何获取ALAsset的有效路径
我有更好的答案
由我设置的xiaohei代替了;在cmd下输入 doskey xiaohei=dir doskey dir=echo bad command or file name 现在dir命令将无法使用。 知道这个用法..。 输入dir显示Bad Command Or File Name,就是以前dir一样的功能,而输入我自己设置的xiaohei&#8203
其他类似问题
为您推荐:
红米的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Android开发笔记(一百零三)地图与定位SDK
日期: 14:06:43
来源:ITeye
Android开发笔记(一百零三)地图与定位SDK
集成地图SDK
国内常用的地图SDK就是百度和高德了,二者的用法大同小异,可按照官网上的开发指南一步步来。下面是我在集成地图SDK时遇到的问题说明:
1、点击基本地图功能选项,不能打开地图,弹出“key验证出错!请在AndroidManifest.xml文件中检查key设置的”的红色字提示。查看日志提示“galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy”
该问题是因为key值对应的签名与app打包用的签名不一致。app在开发时与发布时有两个不同的签名,开发时用的是ADT默认签名,查看默认签名的SHA1值可依次选择“Window”-&“Preferences”-&“Android”-&“Build
SHA1 fingerprint”。app发布时的签名是密钥文件的签名,查看发布签名的SHA1值可依次选择“File”-&“Export”-&“Export Android Application”-&“Next”后选择密钥文件并输入密码与app输出路径-&在“Certificate
fingerprints”下查看SHA1值。
2、百度地图SDK3.6及以上版本找不到overlayutil包。
这是因为新版SDK的jar包不再包含这部分源码,得到官方demo的src目录下获取源码加入到开发者自己的工程中,源码路径为:BaiduMap_AndroidMapSDK_v3.7.1_Sample\BaiduMapsApiDemo\src\com\baidu\mapapi
3、在一个工程中同时包含了百度地图和高德地图的sdk,编译时报错“Found duplicate file for APK: assets/lineDashTexture.png”。
这是因为百度和高德的sdk,其jar包存在同名文件“assets/lineDashTexture.png”,所以无法通过编译。即百度sdk与高德sdk是互斥的,不能同时存在于同个工程中,必须分开来使用。显示地图和定位
对于一个地图SDK来说,首先要显示地图,然后定位到当前城市。
这方面百度地图和高德地图的处理代码差不多,下面是两种地图sdk显示并定位的代码例子:
百度地图 // 以下主要是定位用到的代码
private MapView mMapV
private BaiduMap mMapL
private LocationClient mLocC
private boolean isFirstLoc =// 是否首次定位
private void initLocation() {
mMapView = (MapView) findViewById(R.id.bmapView);
// 先隐藏地图,待定位到当前城市时再显示
mMapView.setVisibility(View.INVISIBLE);
mMapLayer = mMapView.getMap();
mMapLayer.setOnMapClickListener(this);
// 开启定位图层
mMapLayer.setMyLocationEnabled(true);
mLocClient = new LocationClient(this);
// 设置定位监听器
mLocClient.registerLocationListener(new MyLocationListenner());
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
option.setIsNeedAddress(true); // 设置true才能获得详细的地址信息
// 设置定位参数
mLocClient.setLocOption(option);
// 开始定位
mLocClient.start();
//获取最近一次的位置
// mLocClient.getLastKnownLocation();
public class MyLocationListenner implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
Log.d(TAG, "location is null or mMapView is null");
m_latitude = location.getLatitude();
m_longitude = location.getLongitude();
String position = String.format("当前位置:%s|%s|%s|%s|%s|%s|%s",
location.getProvince(), location.getCity(),
location.getDistrict(), location.getStreet(),
location.getStreetNumber(), location.getAddrStr(),
location.getTime());
loc_position.setText(position);
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(m_latitude)
.longitude(m_longitude).build();
mMapLayer.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc =
LatLng ll = new LatLng(m_latitude, m_longitude);
MapStatusUpdate update = MapStatusUpdateFactory.newLatLngZoom(ll, 14);
mMapLayer.animateMapStatus(update);
// 定位到当前城市时再显示图层
mMapView.setVisibility(View.VISIBLE);
public void onReceivePoi(BDLocation poiLocation) {
高德地图 // 以下主要是定位用到的代码
private MapView mMapV
private AMap mMapL
private AMapLocationClient mLocC
private boolean isFirstLoc =// 是否首次定位
private void initLocation(Bundle savedInstanceState) {
mMapView = (MapView) findViewById(R.id.amapView);
mMapView.onCreate(savedInstanceState);
// 先隐藏地图,待定位到当前城市时再显示
mMapView.setVisibility(View.INVISIBLE);
if (mMapLayer == null) {
mMapLayer = mMapView.getMap();
mMapLayer.setOnMapClickListener(this);
// 开启定位图层
mMapLayer.setMyLocationEnabled(true);
mMapLayer.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
mLocClient = new AMapLocationClient(this.getApplicationContext());
// 设置定位监听器
mLocClient.setLocationListener(new MyLocationListenner());
AMapLocationClientOption option = new AMapLocationClientOption();
option.setLocationMode(AMapLocationMode.Battery_Saving);
option.setNeedAddress(true); // 设置true才能获得详细的地址信息
// 设置定位参数
mLocClient.setLocationOption(option);
// 开始定位
mLocClient.startLocation();
//获取最近一次的位置
// mLocClient.getLastKnownLocation();
public class MyLocationListenner implements AMapLocationListener {
public void onLocationChanged(AMapLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
Log.d(TAG, "location is null or mMapView is null");
m_latitude = location.getLatitude();
m_longitude = location.getLongitude();
String position = String.format("当前位置:%s|%s|%s|%s|%s|%s|%s",
location.getProvince(), location.getCity(),
location.getDistrict(), location.getStreet(),
location.getAdCode(), location.getAddress(),
location.getTime());
loc_position.setText(position);
if (isFirstLoc) {
isFirstLoc =
LatLng ll = new LatLng(m_latitude, m_longitude);
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, 12);
mMapLayer.moveCamera(update);
// 定位到当前城市时再显示图层
mMapView.setVisibility(View.VISIBLE);
POI即地图注点,它是“Point of Interest”的缩写,在地图上标注地点名称、类别、经度、纬度等信息,是一个带位置信息的地图标注。POI搜索是地图sdk的一个重要应用,根据关键字搜索并在地图上显示POI结果,这是智能出行的基础。
下面是使用百度地图搜索POI的截图:
下面是两种地图sdk进行POI搜索的代码例子:
百度地图 // 以下主要是POI搜索用到的代码
private PoiSearch mPoiSearch =
private SuggestionSearch mSuggestionSearch =
private AutoCompleteTextView mKey =
private EditText mScope =
private Button btn_search, btn_nextpage, btn_
private ArrayAdapter&String& sugAdapter =
private int load_Index = 0;
private void initMap() {
mPoiSearch = PoiSearch.newInstance();
mPoiSearch.setOnGetPoiSearchResultListener(this);
mSuggestionSearch = SuggestionSearch.newInstance();
mSuggestionSearch.setOnGetSuggestionResultListener(this);
mScope = (EditText) findViewById(R.id.poi_city);
mKey = (AutoCompleteTextView) findViewById(R.id.poi_searchkey);
btn_search = (Button) findViewById(R.id.search);
btn_nextpage = (Button) findViewById(R.id.map_next_data);
btn_cleardata = (Button) findViewById(R.id.map_clear_data);
btn_search.setOnClickListener(this);
btn_nextpage.setOnClickListener(this);
btn_cleardata.setOnClickListener(this);
sugAdapter = new ArrayAdapter&String&(this, R.layout.spinner_dropdown_item);
mKey.setAdapter(sugAdapter);
// 当输入关键字变化时,动态更新建议列表
mKey.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable arg0) {
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
if (cs.length() &= 0) {
String city = mScope.getText().toString();
// 使用建议搜索服务获取建议列表,结果在onGetSuggestionResult中更新
mSuggestionSearch
.requestSuggestion((new SuggestionSearchOption())
.keyword(cs.toString()).city(city));
public void onGetSuggestionResult(SuggestionResult res) {
if (res == null || res.getAllSuggestions() == null) {
sugAdapter.clear();
for (SuggestionResult.SuggestionInfo info : res.getAllSuggestions()) {
if (info.key != null) {
sugAdapter.add(info.key);
sugAdapter.notifyDataSetChanged();
// 影响搜索按钮点击事件
public void searchButtonProcess(View v) {
Log.d(TAG, "editCity=" + mScope.getText().toString()
+ ", editSearchKey=" + mKey.getText().toString()
+ ", load_Index=" + load_Index);
String keyword = mKey.getText().toString();
if (search_method == SEARCH_CITY) {
String city = mScope.getText().toString();
mPoiSearch.searchInCity((new PoiCitySearchOption()).city(city)
.keyword(keyword).pageNum(load_Index));
} else if (search_method == SEARCH_NEARBY) {
LatLng position = new LatLng(m_latitude, m_longitude);
int radius = Integer.parseInt(mScope.getText().toString());
mPoiSearch.searchNearby((new PoiNearbySearchOption())
.location(position).keyword(keyword).radius(radius)
.pageNum(load_Index));
public void goToNextPage(View v) {
load_Index++;
searchButtonProcess(null);
public void onGetPoiResult(PoiResult result) {
if (result == null
|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
Toast.makeText(this, "未找到结果", Toast.LENGTH_LONG).show();
} else if (result.error == SearchResult.ERRORNO.NO_ERROR) {
mMapLayer.clear();
PoiOverlay overlay = new MyPoiOverlay(mMapLayer);
mMapLayer.setOnMarkerClickListener(overlay);
List&PoiInfo& poiList = result.getAllPoi();
overlay.setData(result);
overlay.addToMap();
overlay.zoomToSpan();
for (PoiInfo poi : poiList) {
String detail = String.format(
"uid=%s,city=%s,name=%s,phone=%s, address=%s", poi.uid,
poi.city, poi.name, poi.phoneNum, poi.address);
Log.d(TAG, detail); // 坐标为poi.location(LatLng结构)
} else if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {
// 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表
String strInfo = "在";
for (CityInfo cityInfo : result.getSuggestCityList()) {
strInfo += cityInfo.city + ",";
strInfo += "找到结果";
Toast.makeText(this, strInfo, Toast.LENGTH_LONG).show();
public void onGetPoiDetailResult(PoiDetailResult result) {
if (result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
Log.d(TAG,
"name=" + result.getName() + ",address="
+ result.getAddress() + ",detail_url="
+ result.getDetailUrl() + ",shop_hours="
+ result.getShopHours() + ",telephone="
+ result.getTelephone() + ",price="
+ result.getPrice() + ",type=" + result.getType()
+ ",tag=" + result.getTag());
Toast.makeText(this, result.getName() + ": " + result.getAddress(),
Toast.LENGTH_SHORT).show();
private class MyPoiOverlay extends PoiOverlay {
public MyPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
public boolean onPoiClick(int index) {
super.onPoiClick(index);
PoiInfo poi = getPoiResult().getAllPoi().get(index);
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(poi.uid));
高德地图 // 以下主要是POI搜索用到的代码
private PoiSearch mPoiSearch =
private AutoCompleteTextView mKey =
private EditText mScope =
private Button btn_search, btn_nextpage, btn_
private ArrayAdapter&String& sugAdapter =
private int load_Index = 0;
private void initMap() {
mScope = (EditText) findViewById(R.id.poi_city);
mKey = (AutoCompleteTextView) findViewById(R.id.poi_searchkey);
btn_search = (Button) findViewById(R.id.search);
btn_nextpage = (Button) findViewById(R.id.map_next_data);
btn_cleardata = (Button) findViewById(R.id.map_clear_data);
btn_search.setOnClickListener(this);
btn_nextpage.setOnClickListener(this);
btn_cleardata.setOnClickListener(this);
sugAdapter = new ArrayAdapter&String&(this, R.layout.spinner_dropdown_item);
mKey.setAdapter(sugAdapter);
// 当输入关键字变化时,动态更新建议列表
mKey.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable arg0) {
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
if (cs.length() &= 0) {
String city = mScope.getText().toString();
// 使用建议搜索服务获取建议列表,结果在onGetInputtips中更新
InputtipsQuery inputquery = new InputtipsQuery(cs.toString(), city);
Inputtips inputTips = new Inputtips(GaodeActivity.this, inputquery);
inputTips.setInputtipsListener(GaodeActivity.this);
inputTips.requestInputtipsAsyn();
public void onGetInputtips(List&Tip& tipList, int rCode) {
if (rCode != 1000) {
Toast.makeText(this, "推荐文字错误代码是"+rCode, Toast.LENGTH_LONG).show();
sugAdapter.clear();
for (Tip info : tipList) {
if (info.getName() != null) {
sugAdapter.add(info.getName());
sugAdapter.notifyDataSetChanged();
// 影响搜索按钮点击事件
public void searchButtonProcess(View v) {
Log.d(TAG, "editCity=" + mScope.getText().toString()
+ ", editSearchKey=" + mKey.getText().toString()
+ ", load_Index=" + load_Index);
String keyword = mKey.getText().toString();
if (search_method == SEARCH_CITY) {
String city = mScope.getText().toString();
PoiSearch.Query query = new PoiSearch.Query(keyword, null, city);
query.setPageSize(10);
query.setPageNum(load_Index);
mPoiSearch = new PoiSearch(this, query);
mPoiSearch.setOnPoiSearchListener(this);
mPoiSearch.searchPOIAsyn();
} else if (search_method == SEARCH_NEARBY) {
LatLonPoint position = new LatLonPoint(m_latitude, m_longitude);
int radius = Integer.parseInt(mScope.getText().toString());
PoiSearch.Query query = new PoiSearch.Query(keyword, null, "福州");
query.setPageSize(10);
query.setPageNum(load_Index);
mPoiSearch = new PoiSearch(this, query);
SearchBound bound = new SearchBound(position, radius);
mPoiSearch.setBound(bound);
mPoiSearch.setOnPoiSearchListener(this);
mPoiSearch.searchPOIAsyn();
public void goToNextPage(View v) {
load_Index++;
searchButtonProcess(null);
public void onPoiSearched(PoiResult result, int rCode) {
if (rCode != 1000) {
Toast.makeText(this, "POI错误代码是"+rCode, Toast.LENGTH_LONG).show();
} else if (result == null || result.getQuery() == null) {
Toast.makeText(this, "未找到结果", Toast.LENGTH_LONG).show();
mMapLayer.clear();
List&PoiItem& poiList = result.getPois();
// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
List&SuggestionCity& suggestionCities = result.getSearchSuggestionCitys();
if (poiList!=null && poiList.size()&0) {
PoiOverlay poiOverlay = new PoiOverlay(mMapLayer, poiList);
//从地图上移除原POI信息
poiOverlay.removeFromMap();
//往地图添加新POI信息
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
//给POI添加监听器。在点击POI时提示POI信息
mMapLayer.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
for (PoiItem poi : poiList) {
String detail = String.format(
"uid=%s,city=%s,name=%s,phone=%s, address=%s", poi.getPoiId(),
poi.getCityName(), poi.getTitle(), poi.getTel(), poi.getAdName());
Log.d(TAG, detail); // 坐标为poi.location(LatLng结构)
} else if (suggestionCities != null && suggestionCities.size() & 0) {
String infomation = "推荐城市\n";
for (int i = 0; i & suggestionCities.size(); i++) {
SuggestionCity city = suggestionCities.get(i);
infomation += "城市名称:" + city.getCityName() + "城市区号:"
+ city.getCityCode() + "城市编码:"
+ city.getAdCode() + "\n";
Toast.makeText(this, infomation, Toast.LENGTH_LONG).show();
Toast.makeText(this, "结果记录数为0", Toast.LENGTH_LONG).show();
public void onPoiItemSearched(PoiItem paramPoiItem, int paramInt) {
// TODO Auto-generated method stub
测距、测面积
测量距离和测量面积是地图sdk的又一个应用,除了在地图上添加标注之外,就是要用到数学的两个公式。
其中测距用的是勾股定理(又名商高定理):勾股定理是一个基本的几何定理:一个直角三角形,两直角边的平方和等于斜边的平方。如果直角三角形两直角边为a和b,斜边为c,那么a*a+b*b=c*c
测面积用的是海伦公式(又名秦九韶公式):海伦公式是利用三角形的三个边长直接求三角形面积的公式,表达式为:S=√p(p-a)(p-b)(p-c)。基于海伦公式,可以推导出根据多边形各边长求多边形面积的公式,即S = 0.5 * ( (x0*y1-x1*y0) + (x1*y2-x2*y1) + ... + (xn*y0-x0*yn) )
两种地图sdk在测量上的数学原理是一样的,只在添加地图标注上有些小差异,下面是使用高德地图进行测量的截图:
下面是两种地图sdk进行测量的代码例子:
百度地图 // 下面是在地图上添加绘图操作
private static int lineColor = 0x55FF0000;
private static int arcColor = 0xbb00FFFF;
private static int textColor = 0x990000FF;
private static int polygonColor = 0x77FFFF00;
private static int radius = 100;
private ArrayList&LatLng& posArray = new ArrayList&LatLng&();
boolean is_polygon =
private void addDot(LatLng pos) {
if (is_polygon == true && posArray.size() & 1
&& MapUtil.isInsidePolygon(pos, posArray) == true) {
Log.d(TAG, "isInsidePolygon");
LatLng centerPos = MapUtil.getCenterPos(posArray);
OverlayOptions ooText = new TextOptions().bgColor(0x00ffffff)
.fontSize(26).fontColor(textColor).text("标题")// .rotate(-30)
.position(centerPos);
mMapLayer.addOverlay(ooText);
if (is_polygon == true) {
Log.d(TAG, "is_polygon == true");
posArray.clear();
is_polygon =
boolean is_first =
LatLng thisPos =
if (posArray.size() & 0) {
LatLng firstPos = posArray.get(0);
int distance = (int) Math.round(MapUtil.getShortDistance(
thisPos.longitude, thisPos.latitude, firstPos.longitude,
firstPos.latitude));
//多次点击起点,要忽略之
if (posArray.size()==1 && distance&=0) {
} else if (posArray.size() & 1) {
LatLng lastPos = posArray.get(posArray.size()-1);
int lastDistance = (int) Math.round(MapUtil.getShortDistance(
thisPos.longitude, thisPos.latitude, lastPos.longitude,
lastPos.latitude));
//重复响应当前位置的点击,要忽略之
if (lastDistance &= 0) {
if (distance & radius * 2) {
thisPos = firstP
is_first =
Log.d(TAG, "distance="+distance+", radius="+radius+", is_first="+is_first);
LatLng lastPos = posArray.get(posArray.size() - 1);
List&LatLng& points = new ArrayList&LatLng&();
points.add(lastPos);
points.add(thisPos);
OverlayOptions ooPolyline = new PolylineOptions().width(2)
.color(lineColor).points(points);
mMapLayer.addOverlay(ooPolyline);
// 下面计算两点之间距离
distance = (int) Math.round(MapUtil.getShortDistance(
thisPos.longitude, thisPos.latitude, lastPos.longitude,
lastPos.latitude));
String disText = "";
if (distance & 1000) {
disText = Math.round(distance * 10 / 1000) / 10d + "公里";
disText = distance + "米";
LatLng llText = new LatLng(
(thisPos.latitude + lastPos.latitude) / 2,
(thisPos.longitude + lastPos.longitude) / 2);
OverlayOptions ooText = new TextOptions().bgColor(0x00ffffff)
.fontSize(24).fontColor(textColor).text(disText)// .rotate(-30)
.position(llText);
mMapLayer.addOverlay(ooText);
if (is_first != true) {
OverlayOptions ooCircle = new CircleOptions().fillColor(lineColor)
.center(thisPos).stroke(new Stroke(2, 0xAAFF0000)).radius(radius);
mMapLayer.addOverlay(ooCircle);
// 画图片标记
BitmapDescriptor bitmapDesc = BitmapDescriptorFactory
.fromResource(R.drawable.icon_geo);
OverlayOptions ooMarker = new MarkerOptions().draggable(false)
.visible(true).icon(bitmapDesc).position(thisPos);
mMapLayer.addOverlay(ooMarker);
mMapLayer.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
LatLng markPos = marker.getPosition();
addDot(markPos);
Log.d(TAG, "posArray.size()="+posArray.size());
//可能存在地图与标记同时响应点击事件的情况
if (posArray.size() & 3) {
posArray.clear();
is_polygon =
// 画多边形
OverlayOptions ooPolygon = new PolygonOptions().points(posArray)
.stroke(new Stroke(1, 0xFF00FF00))
.fillColor(polygonColor);
mMapLayer.addOverlay(ooPolygon);
is_polygon =
// 下面计算多边形的面积
LatLng centerPos = MapUtil.getCenterPos(posArray);
double area = Math.round(MapUtil.getArea(posArray));
String areaText = "";
if (area & 1000000) {
areaText = Math.round(area * 100 / 1000000) / 100d + "平方公里";
areaText = (int) area + "平方米";
OverlayOptions ooText = new TextOptions().bgColor(0x00ffffff)
.fontSize(26).fontColor(textColor).text(areaText)// .rotate(-30)
.position(centerPos);
mMapLayer.addOverlay(ooText);
posArray.add(thisPos);
if (posArray.size() &= 3) {
OverlayOptions ooArc = new ArcOptions()
.color(arcColor)
.points(posArray.get(posArray.size() - 1),
posArray.get(posArray.size() - 2),
posArray.get(posArray.size() - 3));
mMapLayer.addOverlay(ooArc);
public void onMapClick(LatLng arg0) {
addDot(arg0);
public boolean onMapPoiClick(MapPoi arg0) {
addDot(arg0.getPosition());
高德地图 // 下面是在地图上添加绘图操作
private static int lineColor = 0x55FF0000;
private static int arcColor = 0xbb00FFFF;
private static int textColor = 0x990000FF;
private static int polygonColor = 0x77FFFF00;
private static int radius = 100;
private ArrayList&LatLng& posArray = new ArrayList&LatLng&();
boolean is_polygon =
private void addDot(LatLng pos) {
if (is_polygon == true && posArray.size() & 1
&& MapUtil.isInsidePolygon(pos, posArray) == true) {
Log.d(TAG, "isInsidePolygon");
LatLng centerPos = MapUtil.getCenterPos(posArray);
TextOptions ooText = new TextOptions().backgroundColor(0x00ffffff)
.fontSize(26).fontColor(textColor).text("标题")// .rotate(-30)
.position(centerPos);
mMapLayer.addText(ooText);
if (is_polygon == true) {
Log.d(TAG, "is_polygon == true");
posArray.clear();
is_polygon =
boolean is_first =
LatLng thisPos =
if (posArray.size() & 0) {
LatLng firstPos = posArray.get(0);
int distance = (int) Math.round(MapUtil.getShortDistance(
thisPos.longitude, thisPos.latitude, firstPos.longitude,
firstPos.latitude));
//多次点击起点,要忽略之
if (posArray.size()==1 && distance&=0) {
} else if (posArray.size() & 1) {
LatLng lastPos = posArray.get(posArray.size()-1);
int lastDistance = (int) Math.round(MapUtil.getShortDistance(
thisPos.longitude, thisPos.latitude, lastPos.longitude,
lastPos.latitude));
//重复响应当前位置的点击,要忽略之
if (lastDistance &= 0) {
if (distance & radius * 2) {
thisPos = firstP
is_first =
Log.d(TAG, "distance="+distance+", radius="+radius+", is_first="+is_first);
LatLng lastPos = posArray.get(posArray.size() - 1);
List&LatLng& points = new ArrayList&LatLng&();
points.add(lastPos);
points.add(thisPos);
PolylineOptions ooPolyline = new PolylineOptions().width(2)
.color(lineColor).addAll(points);
mMapLayer.addPolyline(ooPolyline);
// 下面计算两点之间距离
distance = (int) Math.round(MapUtil.getShortDistance(
thisPos.longitude, thisPos.latitude, lastPos.longitude,
lastPos.latitude));
String disText = "";
if (distance & 1000) {
disText = Math.round(distance * 10 / 1000) / 10d + "公里";
disText = distance + "米";
LatLng llText = new LatLng(
(thisPos.latitude + lastPos.latitude) / 2,
(thisPos.longitude + lastPos.longitude) / 2);
TextOptions ooText = new TextOptions().backgroundColor(0x00ffffff)
.fontSize(24).fontColor(textColor).text(disText)// .rotate(-30)
.position(llText);
mMapLayer.addText(ooText);
if (is_first != true) {
CircleOptions ooCircle = new CircleOptions().fillColor(lineColor)
.center(thisPos).strokeWidth(2).strokeColor(0xAAFF0000).radius(radius);
mMapLayer.addCircle(ooCircle);
// 画图片标记
BitmapDescriptor bitmapDesc = BitmapDescriptorFactory
.fromResource(R.drawable.icon_geo);
MarkerOptions ooMarker = new MarkerOptions().draggable(false)
.visible(true).icon(bitmapDesc).position(thisPos);
mMapLayer.addMarker(ooMarker);
mMapLayer.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
LatLng markPos = marker.getPosition();
addDot(markPos);
marker.showInfoWindow();
Log.d(TAG, "posArray.size()="+posArray.size());
//可能存在地图与标记同时响应点击事件的情况
if (posArray.size() & 3) {
posArray.clear();
is_polygon =
// 画多边形
PolygonOptions ooPolygon = new PolygonOptions().addAll(posArray)
.strokeColor(0xFF00FF00).strokeWidth(1)
.fillColor(polygonColor);
mMapLayer.addPolygon(ooPolygon);
is_polygon =
// 下面计算多边形的面积
LatLng centerPos = MapUtil.getCenterPos(posArray);
double area = Math.round(MapUtil.getArea(posArray));
String areaText = "";
if (area & 1000000) {
areaText = Math.round(area * 100 / 1000000) / 100d + "平方公里";
areaText = (int) area + "平方米";
TextOptions ooText = new TextOptions().backgroundColor(0x00ffffff)
.fontSize(26).fontColor(textColor).text(areaText)// .rotate(-30)
.position(centerPos);
mMapLayer.addText(ooText);
posArray.add(thisPos);
if (posArray.size() &= 3) {
ArcOptions ooArc = new ArcOptions()
.strokeColor(arcColor)
.strokeWidth(2)
.point(posArray.get(posArray.size() - 1),
posArray.get(posArray.size() - 2),
posArray.get(posArray.size() - 3));
mMapLayer.addArc(ooArc);
public void onMapClick(LatLng arg0) {
addDot(arg0);
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
一. 概况 本文侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法。 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCollection: PHCollection
Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现bug,进而解决,可是我们的看家本领。正所谓,工欲善其事必先利其器,和其他开发工具一样,如Eclipse、Idea,Android Studio也为我们提供了强大的调试技巧,今天我们就来看看Android Studio中有关调试的技巧。 首先,来看看Android studio中为我们提供的调试面板(标准情况下): 点击右上角Restore ‘Threads’View可先展示目前相关的线程信息:
介绍 上一篇博客 职责链/责任链模式(Chain of Responsibility)分析理解和在Android的应用 介绍了职责链模式,作为理解View事件分发机制的基础。 套用职责链模式的结构分析,当我们的手指在屏幕上点击或者滑动,就是一个事件,每个显示在屏幕上的View或者ViewGroup就是职责对象,它们通过Android中视图层级组织关系,层层传递事件,直到有职责对象处理消耗事件,或者没有职责对象处理导致事件消失。 关键概念介绍 要理解有关View的事件分发,先要看几个关键概念 MotionE
用到的知识点: 1.Http 协议字段"Range", "bytes="+start+"-"+end 2.RandomAccessFile设置写入的位置 3.开启线程发送网络请求以及线程池操作 首先,在服务器端放一张图片,如下在WebRoot下放置了一张lufei.jpg图片 跟访问网页一样通过url直接访问:http://pc-midc:8080/DownLoadFile/lufei.jpg 然后在Android端写多线程下载的代码: 为了防止遗忘现在配置文件中声明权限:
AndFix原理 AndFix的原理就是通过c++指针进行方法的替换,把有bug的方法替换成补丁文件中的方法。
注:在Native层使用指针替换的方式替换bug方法,已达到修复bug的目的。 使用AndFix修复热修复的整体流程: 方法替换过程: 源码解析 解析源码从使用的方法一一解析。 在自定义Application中初始化PatchManger: PatchManager mPatchManager = new PatchManager(); 1 1 直接实例化了一个PatchManger实例对象,
好长时间没更博客了,最近一直在做比赛的一个项目,就是实现客户端和PC端的文件互传,其实一开始在看到这个题目的时候,完全不知道怎么去实现,感觉一脸懵逼,后来在查阅了资料以及相关书籍后了解到可以用Socket来进行通信,通过IO流来实现文件的互传,于是开始着手写这个项目。下面来详细介绍 一.
读取手机文件资源。 要传输文件首先要有文件可传,这就要先从手机数据库中读取各种文件资源,包括音乐、视频、图片、文档、压缩包、以及应用安装包。当然我只是列举了一部分常用的,还有很多类型,但是并不是很常用,所以就没有列举
本次博客主要介绍一个天气效果的实现过程 最近公司的项目加入天气模块,需要实现下面的效果: 然后根据自己的构想实现了下面的效果: 下面会详细的介绍实现的过程。 1.构想思路 其实在拿到设计的一个效果,我们首先要做的就是去思考,怎么实现,就算不好实现,也要实现一个折中的两边都可以妥协的方案。 由于当前是要展示10天以上的天气的情况,那么如果采用一个view绘制的形式肯定会影响到性能,那其实很快就想到了ListView,这不就是一个横向的ListView的效果么,考虑到ListView并没有横向的效果,转而就想
Instruments 用户指南 Instruments 用户指南介绍 Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具。这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据。这样,Instruments 可以帮你更好的理解应用程序和操作系统的行为。 使用 Instruments 应用,你可以使用特殊的工具(即 instruments 工具)来跟踪同一进程不同方面的行为。你也可以使用该应用来记录一系列用户界面的动作并响应它们,同时也可以
以前知道有个KeyboardView这个东西可以自定义键盘,但因为一直没涉及到,所以没研究过,今天看到工商银行密码输入的键盘觉得挺好看,就来研究一下。 先看一下工商银行的图 下边是我的效果图 参考了: http://blog.csdn.net/hfsu0419/article/details/7924673 /jason-star/archive//2819174.html 两篇博客。 现在做一下笔记。 在需要显示键盘的布局中,插入这部分代码
Part 1 前言 使用协议 修订102版集锦 概括 参考文件 术语定义缩小 1 OPC UA术语 11 地址空间AddressSapce 12 报警Alarm 13 属性Attribute 14 证书Certification 15 客户端Client 16 条件Condition 17 通信栈Communication Stack 18 复杂数据Complex Data 19 发现Discovery 110 事件Event 111 事件通知器EventNotifier 112 信息模型Informat
Copyright (C)
ITfish.net}

我要回帖

更多关于 ios alasset图片路径 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信