用戶溝通與需求訪談是系統開發初期最重要的事項,妥善運用Wireframe工具可大幅縮短溝通時程,降低功能認知落差,針對Apps開發,Fluid UI是一款方便實用的線上Wireframe & Prototype工具,可快速建構Android, iOS and Windows 8 apps趨型。
https://www.fluidui.com/editor/live/
2013年5月16日 星期四
2013年5月10日 星期五
Android程式設計 - Google Maps API v2在地圖上繪圖
程式中可在Google Map上繪製連續線、圓形及多邊形,且繪製的幾何圖形會自動隨地圖縮放調整比例。
GoogleMap.addPolyline()方法用來在地圖上描繪連續線段。
GoogleMap.addPolygon()方法用來在地圖上描繪多邊形。
GoogleMap.addCircle()方法用來在地圖上描繪圓形。
例如:
GoogleMap.addPolyline()方法用來在地圖上描繪連續線段。
GoogleMap.addPolygon()方法用來在地圖上描繪多邊形。
GoogleMap.addCircle()方法用來在地圖上描繪圓形。
例如:
m_map =
((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
LatLng p1 = new LatLng(23.95616, 120.68509);
LatLng p2 = new LatLng(23.95666, 120.68585);
LatLng p3 = new LatLng(23.95836, 120.68732);
m_map.addPolyline(new PolylineOptions().
add(p1, p2, p3).
width(5).
color(Color.LTGRAY).
geodesic(true));
m_map.addCircle(new CircleOptions().
center(p1).
radius(10).
strokeWidth(5).
strokeColor(Color.RED));
m_map.addCircle(new CircleOptions().
center(p2).
radius(10).
strokeWidth(5).
strokeColor(Color.RED));
m_map.addCircle(new CircleOptions().
center(p3).
radius(10).
strokeWidth(5).
strokeColor(Color.RED));
2013年5月9日 星期四
Android程式設計 - Google Maps API v2自訂地標訊息視窗
預設的地標訊息title及snippet都只能顯示單行文字,當文字訊息過長時,後面的部份就只顯示「…」而看不到完整的文字內容。
要自訂地標訊息視窗樣式,首先必須為地標訊息視窗設計所需的版面配置,例如使用一個圖示與二個文字方塊做為地標訊息視窗版面。
要自訂地標訊息視窗樣式,首先必須為地標訊息視窗設計所需的版面配置,例如使用一個圖示與二個文字方塊做為地標訊息視窗版面。
接著為GoogleMap設計一個Adapter類別,在該類別的getInfoContents()方法中,將所要顯示的地標title及snippet內容設定到自訂的地標訊息視窗版面元件中。
class
MyInfoWindowAdapter implements
InfoWindowAdapter {
@Override
public View getInfoContents(Marker marker) {
// 依指定layout檔,建立地標訊息視窗View物件
View infoWindow = getLayoutInflater().inflate(R.layout.my_infowindow, null);
// 顯示地標title
TextView title =
((TextView)infoWindow.findViewById(R.id.txtTitle));
title.setText(marker.getTitle());
// 顯示地標snippet
TextView
snippet = ((TextView)infoWindow.findViewById(R.id.txtSnippet));
snippet.setText(marker.getSnippet());
return infoWindow;
}
...
}
最後設定GoogleMap使用自訂的MyInfoWindowAdapter物件做為地標訊息視窗轉接器。
m_map.setInfoWindowAdapter(new
MyInfoWindowAdapter());2013年5月8日 星期三
Android程式設計 - 如何中止Thread
程式中時需要使用multithread進行背景作業, 但記得必須在程式結束前中止Thread。
查閱文件會發現不論destroy()方法或stop()方法都已聲明不應用來終止thread,而interrupt()方法也並不是用來終止thread。那麼到底該如何正確在應用程式結束時一併終止所建立的Thread,正確的作法是使用interrupt()方法並配合shared variable控制
boolean RUN_THREAD = true;
...
查閱文件會發現不論destroy()方法或stop()方法都已聲明不應用來終止thread,而interrupt()方法也並不是用來終止thread。那麼到底該如何正確在應用程式結束時一併終止所建立的Thread,正確的作法是使用interrupt()方法並配合shared variable控制
boolean RUN_THREAD = true;
...
ocrThread = new Thread(){
public void run(){
while (RUN_THREAD){
//執行緒作業
}
}
};
ocrThread.start();
...
protected void onDestroy() {
RUN_THREAD = false;
ocrThread.interrupt();
ocrThread = null;
}
2013年5月7日 星期二
Android程式設計 - Google Maps API v2 可拖曳地圖地標
若要允許使用者移動地圖上的地標,則地標之draggable屬性必須設定為true,並實作GoogleMap之OnMarkerDrag事件監聽器。
OnMarkerDrag事件監聽器有三個回呼方法,onMarkerDragStart()、onMarkerDrag()及onMarkerDragEnd(),如果沒有特別需求,就維持原程式框架即可。
使用者只要按住地標一段時間,地標就會浮起,之後就可開始拖曳調整地標位置。
OnMarkerDrag事件監聽器有三個回呼方法,onMarkerDragStart()、onMarkerDrag()及onMarkerDragEnd(),如果沒有特別需求,就維持原程式框架即可。
使用者只要按住地標一段時間,地標就會浮起,之後就可開始拖曳調整地標位置。
m_map = ((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
MarkerOptions marker2 = new MarkerOptions().
position(new LatLng(23.95616, 120.68509)).
title("椰林大道荷花香").
snippet("休閒散心的景觀步道,兩側高大的大王椰子樹,樹下緊傍著荷花相伴").
draggable(true).
icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_marker2));
m_map.addMarker(marker2);
m_map.setOnMarkerDragListener(new OnMarkerDragListener(){
@Override
public void
onMarkerDrag(Marker arg0) {}
@Override
public void
onMarkerDragEnd(Marker arg0) {}
@Override
public void
onMarkerDragStart(Marker arg0) {}
});
Android程式設計 - Google Maps API v2 地圖地標
地圖標記方便我們在地圖的特定位置加上記號,讓重要地標在地圖上一目了然。
程式中可使用GoogleMap.addMarker()方法在地圖上加上地標,當使用者點擊地標時即會顯示地標中的訊息。
程式中可使用GoogleMap.addMarker()方法在地圖上加上地標,當使用者點擊地標時即會顯示地標中的訊息。
l Marker GoogleMap.addMarker(MarkerOptions options)
依據MarkerOptions物件內容,在地圖加上地標。
options MarkerOptions物件,用來描述地標內容。
地標內容是以MarkerOptions物件來描述,包括以下屬性:
position LatLng物件,放置地標的地圖座標,此為必要項。
title 地標名稱,當使用者點擊地標時,會開啟訊息視窗顯示標題。
snippet 地標之附加說明文字,會顯示在標題文字下方。
draggable 是否允許使用者拖曳地標,預設值為false。
visible 是否顯示地標,預設值為true。
anchor 地標圖示與position座標值位置之對齊方式,預設是將地標圖示下緣中央貼齊position座標值。
icon BitmapDescriptor物件,用來描述做為地標圖案之圖示。
例如下列程式碼在地圖中加入1個地標:
m_map = ((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
MarkerOptions marker1 = new
MarkerOptions().
position(new
LatLng(23.95666, 120.68585)).
title("中興新村牌樓").
snippet("雙十造型牌樓,是中興新村的門戶景觀,也是進入中興新村的指標").
icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_marker));
m_map.addMarker(marker1);
2013年5月3日 星期五
Android程式設計 - Google Maps API v2 地圖定位
使用My location圖層是最簡便的定位方式,其概念像是在地圖上覆蓋透明圖層,當我們啟用my-location圖層後,定位點內容自然會疊覆到地圖上。
程式中可使用GoogleMap.setMyLocationEnabled()方法來開啟或關閉My location圖層。例如:
GoogleMap m_map =
((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
m_map.setMyLocationEnabled(true);
2013年5月2日 星期四
Android程式設計 - Google Maps API v2 變更地圖檢視模式
GoogleMap物件支援一般地圖(就是大家常用的道路地圖)、衛星地圖、及地形圖,預設是顯示道路地圖,程式中可使用setMapType ()來設定顯示模式。
l void GoogleMap.setMapType (int type)
依指定之LatLng座標物件及地圖縮放值,建立CameraUpdate物件。
type 地圖顯示模式代碼,有效設定值如下:
GoogleMap.MAP_TYPE_NORMAL 道路地圖。
GoogleMap.MAP_TYPE_SATELLITE 衛星空照圖。
GoogleMap.MAP_TYPE_TERRAIN 地形圖。
GoogleMap.MAP_TYPE_HYBRID 道路地圖混合空照圖。
例如下列程式碼設定顯示地形圖:
GoogleMap map =
((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
Android程式設計 - Google Maps API v2 調整地圖中心點
地圖座標是使用LatLng物件來表示,LatLng建構子第一個參數表示緯度值,第二個參數表示經度值。例如:
LatLng nkut = new LatLng(23.97918, 120.69686);
程式中可直接使用GoogleMap物件之moveCamera(CameraUpdate update)方法或animateCamera(CameraUpdate update)方法來移動地圖鏡頭到指定座標點,差別在於animateCamera()會有地圖移動效果。
在上述方法中,update為地圖鏡頭動作物件,必須使用CameraUpdateFactory類別建構CameraUpdate物件。最簡單的方式是使用CameraUpdateFactory.newLatLng (LatLng latLng),例如:
LatLng nkut = new LatLng(23.97918, 120.69686);
程式中可直接使用GoogleMap物件之moveCamera(CameraUpdate update)方法或animateCamera(CameraUpdate update)方法來移動地圖鏡頭到指定座標點,差別在於animateCamera()會有地圖移動效果。
在上述方法中,update為地圖鏡頭動作物件,必須使用CameraUpdateFactory類別建構CameraUpdate物件。最簡單的方式是使用CameraUpdateFactory.newLatLng (LatLng latLng),例如:
GoogleMap map =
((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
LatLng nkut = new
LatLng(23.97918, 120.69686);
map.moveCamera(CameraUpdateFactory.newLatLng(nkut));
CameraUpdateFactory.newLatLngZoom()方法除了指定地圖中心LatLng座標,還同時設定地圖縮放等級。例如:
GoogleMap map =
((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
LatLng nkut = new
LatLng(23.97918, 120.696867);
訂閱:
文章 (Atom)