ArcGIS for Android 體驗(二) 繪製標繪
阿新 • • 發佈:2019-01-27
最最基本的單位是point。然後通過point可以自己組成一個點要素,然後若是想要組成polyline或者polyline的話,那麼需要進行更多操作。Polyline和polygon的基本組成要素是line,可以理解成線段。而line是需要point來組成。每個line有且僅有兩個point,也就是兩點組成一段,然後又line來組成polyline和polygon。這和我們以往的理解有些不同。在以往的理解中,polyline和polygon都是由point組成的。所以現在有了這個不同,在這裡本人就要特別提一下。
大家看到這個point,polyline以及polygon了,這些只能算是要素,自己是沒有外形的。我們需要為其設定外形,點的形狀,顏色,大小。線的粗細,顏色,虛線與否。面的透明度,顏色以及填充物樣式等。這些在ArcGIS for Android中為Symbol中進行設定。Symbol的基本結構大概如此:
一個真正的標繪Graphic的基本組成單元是由Geometry和Symbol共同完成的,所以我們在設定標繪的時候,要使用兩者一同設定。下文是Graphic的構造器的說明:
工程的建立
Menu的設定
在談及完Graphic的結構原理後,現在需要做的是對於工程的建立來實現標繪的新增。
在介面中,不修改main.xml,整個螢幕不新增控制元件,讓其顯示最完成。然後所有操作設定在menu上面。我分成點,線,面三種類型的繪製,每種型別有一些選擇來區別標繪內容。
Menu設定的實現程式碼:
- //選單的載入
-
@Override
- publicboolean onCreateOptionsMenu(Menu menu){
- //載入點選擇選單
- SubMenu pointSubMenu=menu.addSubMenu("點");
- pointSubMenu.setHeaderTitle("選擇繪製的點");
- pointSubMenu.add(0, 0, 0, "圖點");
- pointSubMenu.add(0, 1, 0, "紅點");
- pointSubMenu.add(0, 2, 0, "藍點");
-
pointSubMenu.add(0
- //載入線選擇選單
- SubMenu lineSubMenu=menu.addSubMenu("線");
- lineSubMenu.setHeaderTitle("選擇繪製的線");
- lineSubMenu.add(1,0,0,"白線");
- lineSubMenu.add(1, 1, 0, "紅線");
- lineSubMenu.add(1, 2, 0, "藍虛線");
- lineSubMenu.add(1, 3, 0, "黃粗線");
- //載入面選擇選單
- SubMenu gonMenu=menu.addSubMenu("面");
- gonMenu.setHeaderTitle("選擇繪製的面");
- gonMenu.add(2, 0, 0, "紅面");
- gonMenu.add(2, 1, 0, "綠面半透明");
- gonMenu.add(2,2,0,"藍面虛線填充");
- returnsuper.onCreateOptionsMenu(menu);
- }
- //選單項被單擊的事件
- @Override
- publicboolean onOptionsItemSelected(MenuItem mi){
- isChoose=true;
- //判斷是在哪個groupid裡面的
- switch (mi.getGroupId()) {
- case0:
- drawType=Geometry.Type.POINT;
- switch (mi.getItemId()) {
- case0:
- Drawable drawable=this.getResources().getDrawable(R.drawable.icon);
- symbol=new PictureMarkerSymbol(drawable);
- break;
- case1:
- symbol=new SimpleMarkerSymbol(Color.RED, 14, SimpleMarkerSymbol.STYLE.CIRCLE);
- break;
- case2:
- symbol=new SimpleMarkerSymbol(Color.BLUE, 14, SimpleMarkerSymbol.STYLE.CIRCLE);
- break;
- case3:
- symbol=new SimpleMarkerSymbol(Color.GREEN, 14, SimpleMarkerSymbol.STYLE.CIRCLE);
- break;
- default:
- break;
- }
- break;
- case1:
- drawType=Geometry.Type.POLYLINE;
- switch (mi.getItemId()) {
- case0:
- symbol=new SimpleLineSymbol(Color.WHITE, 8, SimpleLineSymbol.STYLE.SOLID);
- break;
- case1:
- symbol=new SimpleLineSymbol(Color.RED, 8, SimpleLineSymbol.STYLE.SOLID);
- break;
- case2:
- symbol=new SimpleLineSymbol(Color.BLUE, 10, SimpleLineSymbol.STYLE.DASH);
- break;
- case3:
- symbol=new SimpleLineSymbol(Color.YELLOW, 18, SimpleLineSymbol.STYLE.SOLID);
- break;
- default:
- break;
- }
- break;
- case2:
- drawType=Geometry.Type.POLYGON;
- switch (mi.getItemId()) {
- case0:
- fillSymbol=new SimpleFillSymbol(Color.RED, SimpleFillSymbol.STYLE.SOLID);
- fillSymbol.setAlpha(100);
- break;
- case1:
- fillSymbol=new SimpleFillSymbol(Color.GREEN);
- fillSymbol.setAlpha(50);
- break;
- case2:
- fillSymbol=new SimpleFillSymbol(Color.BLUE,SimpleFillSymbol.STYLE.BACKWARD_DIAGONAL);
- fillSymbol.setAlpha(100);
- break;
- case3: