第一步:在res文件夹下新建一个xml文件夹,再在里面新建一个xml文件,名字可以随便取,里面代码如下:

<?xml version="1.0" encoding="utf-8"?>

titleTextColor="#ffffff"
titleTextSize="20"
titleTextStyle="1"
titleTextTypeface="serif"
backgroundColor="#66FFCC"
backgroundAlpha="255"
frameColor="#66FFCC"
cornerCurve="10"  
anchor="5" />

第二步,在res/layout文件夹下新建一个xml文件,用于显示callout返回的内容,代码根据自己的需求而定。

第三步,编写核心代码:

public class SymbolizingResults extends Activity {
MapView map;// 显示地图的容器
Button queryBtn;
GraphicsLayer gl;// 标记图层
Callout callout;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
map = (MapView) findViewById(R.id.map);
map.addLayer(new ArcGISTiledMapServiceLayer(
"http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"));
gl = new GraphicsLayer();
gl.setRenderer(createClassBreaksRenderer());
map.addLayer(gl);

queryBtn = (Button) findViewById(R.id.querybtn);
queryBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {

Query query = new Query();
query.setWhere("STATE_NAME='Kansas'");//查询地址
query.setReturnGeometry(true);
String[] outfields = new String[] { "NAME", "STATE_NAME","POP07_SQMI" };// 设置要查询的参数列表
query.setOutFields(outfields);//需要输出显示的字段
query.setOutSpatialReference(map.getSpatialReference());
Query[] queryParams = { query };
AsyncQueryTask qt = new AsyncQueryTask();
qt.execute(queryParams);

}
});

map.setOnSingleTapListener(new OnSingleTapListener() {
private static final long serialVersionUID = 1L;
public void onSingleTap(float x, float y) {
if (!map.isLoaded())
return;
int[] uids = gl.getGraphicIDs(x, y, 2);
if (uids != null && uids.length > 0) {
int targetId = uids[0];
Graphic gr = gl.getGraphic(targetId);
callout = map.getCallout();
callout.setStyle(R.xml.countypop);//第一步中新建的xml文件
String countyName = (String) gr.getAttributeValue("NAME");
String countyPop = gr.getAttributeValue("POP07_SQMI").toString();
callout.setContent(loadView(countyName, countyPop));
callout.show(map.toMapPoint(new Point(x, y)));

} else {
if (callout != null && callout.isShowing()) {
callout.hide();
}
}
}
});
}

private View loadView(String countyName, String pop07) {
View view = LayoutInflater.from(SymbolizingResults.this).inflate(R.layout.sqmi, null);//第二步设置的xml文件
final TextView name = (TextView) view.findViewById(R.id.county_name);
name.setText(countyName + "'s SQMI");
final TextView number = (TextView) view.findViewById(R.id.pop_sqmi);
number.setText(pop07);
final ImageView photo = (ImageView) view.findViewById(R.id.family_photo);
photo.setImageDrawable(SymbolizingResults.this.getResources().getDrawable(R.drawable.family));
return view;
}
// 创建渲染器
private Renderer createClassBreaksRenderer() {
ClassBreaksRenderer renderer = new ClassBreaksRenderer();
renderer.setMinValue(0.0);
renderer.setField("POP07_SQMI");
ClassBreak cb1 = new ClassBreak();
cb1.setClassMaxValue(25);
cb1.setSymbol(new SimpleFillSymbol(Color.argb(128, 56, 168, 0)));
cb1.setLabel("First class");


ClassBreak cb2 = new ClassBreak();
cb2.setClassMaxValue(75);
cb2.setSymbol(new SimpleFillSymbol(Color.argb(128, 139, 209, 0)));
cb2.setLabel("Second class");


ClassBreak cb3 = new ClassBreak();
cb3.setClassMaxValue(175);
cb3.setSymbol(new SimpleFillSymbol(Color.argb(128, 255, 255, 0)));
cb3.setLabel("Third class");


ClassBreak cb4 = new ClassBreak();
cb4.setClassMaxValue(400);
cb4.setSymbol(new SimpleFillSymbol(Color.argb(128, 255, 128, 0)));
cb4.setLabel("Fourth class");


ClassBreak cb5 = new ClassBreak();
cb5.setClassMaxValue(Double.MAX_VALUE);
cb5.setSymbol(new SimpleFillSymbol(Color.argb(128, 255, 0, 0)));


renderer.addClassBreak(cb1);
renderer.addClassBreak(cb2);
renderer.addClassBreak(cb3);
renderer.addClassBreak(cb4);
renderer.addClassBreak(cb5);
return renderer;
}
private class AsyncQueryTask extends AsyncTask {
protected FeatureSet doInBackground(Query... params) {
if (params.length > 0) {
Query query = params[0];
QueryTask queryTask = new QueryTask(
"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/3");
try {
FeatureSet fs = queryTask.execute(query);
return fs;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
protected void onPostExecute(FeatureSet fs) {
gl.addGraphics(fs.getGraphics());
// gl.recycle();
queryBtn.setEnabled(false);
Toast toast = Toast.makeText(SymbolizingResults.this,
"Tap on county for SQMI data", Toast.LENGTH_LONG);
toast.show();
}
}
}

更多相关文章

  1. Android(安卓)- webview原生和JavaScript(js)交互传值的几种方式
  2. Android中widget的应用【安卓源码解析三】
  3. Android中万能的BaseAdapter
  4. Android中在string的xml文件中添加空白字符
  5. Android(安卓)SDK 下载目录文件夹意义详解
  6. [置顶] android build 过程 (ramdisk.img、sytem.img、userdata.i
  7. Android利用activity-alias动态更新图标icon,标题label
  8. Android(安卓)Json的使用(1) 使用jsonschema2pojo生成class文件
  9. layout_weight属性图解

随机推荐

  1. 整理分享ImageView属性大全
  2. android SimpleOnGestureListener详解
  3. 如何在横屏控制软键盘显示一部分
  4. android 一 android 的生命周期
  5. Android(安卓)异步加载解决方案
  6. Android(安卓)NDK编程浅入深出之--Androi
  7. Android(安卓)configChanges用法
  8. android 焦点问题
  9. Android(安卓)UI事件处理[isInTouchMode(
  10. Android青翼蝠王之ContentProvider