com.mapbar.android.maps
Class ItemizedOverlay<Item extends OverlayItem>

java.lang.Object
  extended by com.mapbar.android.maps.Overlay
      extended by com.mapbar.android.maps.ItemizedOverlay<Item>
All Implemented Interfaces:
Overlay.Snappable

public abstract class ItemizedOverlay<Item extends OverlayItem>
extends Overlay
implements Overlay.Snappable

ItemizedOverlay是Overlay的一个基类,它包含了一个OverlayItems列表。它处理从南到北的排序,用于绘制、创建平移边界、为每个点绘制标记点,和维护一个焦点选中的item,同时也负责把一个屏幕点击匹配到item上去,分发焦点改变事件给备选的监听器。


嵌套类概要
static interface ItemizedOverlay.OnFocusChangeListener
          对焦点改变关注的监听器调用该接口。
 
Nested classes/interfaces inherited from class com.mapbar.android.maps.Overlay
Overlay.Snappable
 
Field Summary
 
Fields inherited from class com.mapbar.android.maps.Overlay
SHADOW_X_SKEW, SHADOW_Y_SCALE
 
Constructor Summary
ItemizedOverlay(android.graphics.drawable.Drawable defaultMarker)
          创建一个新的ItemizedOverlay.
 
Method Summary
protected static android.graphics.drawable.Drawable boundCenter(android.graphics.drawable.Drawable balloon)
          调整一个drawable的边界,使得(0,0)是这个drawable中心点的中心。
protected static android.graphics.drawable.Drawable boundCenterBottom(android.graphics.drawable.Drawable balloon)
          调整一个drawable的边界,使得(0,0)是drawabled底部中心的一个像素。
protected abstract  Item createItem(int i)
          子类创建实体item的方法。
 void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
           在每个item上绘制一个标记点。
 GeoPoint getCenter()
          默认情况下,返回第一级别的item。
 Item getFocus()
           
protected  int getIndexToDraw(int drawingOrder)
         返回给定索引对应item的级别。
 Item getItem(int position)
           
 int getLastFocusedIndex()
           
 int getLatSpanE6()
           
 int getLonSpanE6()
           
protected  boolean hitTest(Item item, android.graphics.drawable.Drawable marker, int hitX, int hitY)
          检查给定的点击位置是否在一个item标记点的范围之内。
 Item nextFocus(boolean forwards)
         返回在特定方向上下一个将被焦点选中的item,如果已经到达行尾,则返回null。
 boolean onKeyUp(int keyCode, android.view.KeyEvent event, MapView mapView)
          处理一个key-up事件。
 boolean onSnapToItem(int x, int y, android.graphics.Point snapPoint, MapView mapView)
         检查给定的(x,y)是否足够接近一个导致当前动作的item。
 boolean onTap(GeoPoint p, MapView mapView)
           处理一个点击事件。
protected  boolean onTap(int index)
          覆盖这个方法去处理一个item上的一个“点击”。
 boolean onTouchEvent(android.view.MotionEvent event, MapView mapView)
         处理一个触摸事件。
 boolean onTrackballEvent(android.view.MotionEvent event, MapView mapView)
          处理一个跟踪球事件。
protected  void populate()
          在一个新ItemizedOverlay上执行所有处理的工具方法。
 void setDrawFocusedItem(boolean drawFocusedItem)
         设置是否绘制焦点选中的item。
 void setFocus(Item item)
         如果发现给定的item在overlay上,强制其为当前的焦点选中。
protected  void setLastFocusedIndex(int lastFocusedIndex)
          设置item的索引,这个item最经常(或当前)被焦点选中,如果没有一个item曾被选中,则返回-1.
 void setOnFocusChangeListener(ItemizedOverlay.OnFocusChangeListener l)
           
abstract  int size()
          这个overlay中的item总数。
 
Methods inherited from class com.mapbar.android.maps.Overlay
draw, drawAt, onKeyDown
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ItemizedOverlay

public ItemizedOverlay(android.graphics.drawable.Drawable defaultMarker)
Create a new ItemizedOverlay.

参数:
defaultMarker –对于overlay中的每个item都要被绘制在地图上的一个Drawable;参看draw(android.graphics.Canvas, com.mapbar.android.maps.MapView, boolean)一个item或许可以通过方法OverlayItem.getMarker(int)提供一个可以替换的标记点。这个标记点有两种绘制状态:null或R.attr.state_focused。为了能让点击测试正确工作,两种状态必须有同样的边界。(一个简单的drawable会忽略它自身状态,那意味着它自动有同样的边界。) 注意,为了正确绘制标记点,需要给它添加边界。典型的,这由boundCenterBottom来完成,和super(boundCenterBottom(marker))一样。
Method Detail

boundCenterBottom

protected static android.graphics.drawable.Drawable boundCenterBottom(android.graphics.drawable.Drawable balloon)
调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素。如图形一样,对于“pin”是有用的。方便起见,返回和输入同样的drawable。

参数:
balloon - 待调整的drawable
返回值:
和输入同样的 drawable.

boundCenter

protected static android.graphics.drawable.Drawable boundCenter(android.graphics.drawable.Drawable balloon)
调整一个drawable边界,使得(0,0)是这个drawable中心的中心点。如图形一样,对于"途经点标记"是有用的。方便起见,返回和输入同样的drawable。

Parameters:
balloon - 待调整的 drawable
Returns:
和输入同样的drawable

createItem

protected abstract Item createItem(int i)
子类通过该方法创建实体item。这只能从populate()调用;并且缓存起来待以后使用。


size

public abstract int size()
Overlay中item的数量。在populate()执行过程中一次调用,一直存储。


getCenter

public GeoPoint getCenter()
默认情况下,返回第一级别的item。必须首先调用populate() .


getIndexToDraw

protected int getIndexToDraw(int drawingOrder)
返回给定索引对应item的级别。默认情况下,item通过纬度排序。子类可以覆盖这个方法以改变绘制顺序。


draw

public void draw(android.graphics.Canvas canvas,
                 MapView mapView,
                 boolean shadow)

在每个item上绘制一个标记点。首先必须调用 populate()

对应Overlay中的每个item,标记点都要被绘制两次――一次是在绘制阴影阶段,然后是在非阴影阶段。标记点的底中部将和item的地理坐标对齐。

通过覆盖方法getIndexToDraw(int) ,绘制的顺序可能会改变。一个item可能通过方法OverlayItem.getMarker(int) 获得另外一个标记点。如果那个方法返回null,那么使用默认的标记点。

焦点选中的item总是最后一个绘制,然后放置在其它item之上达到可见。

覆盖:
Overlay中的draw
参数:
canvas - 待绘制的画布。注意,这个画布或许已经被实施了某种变换,所以保留其原样。 mapView - 请求绘制的MapView。使用MapView.getProjection() 在屏幕坐标和经纬度对之间做变换。
shadow - 如果为true,绘制阴影层。如果为false, 绘制overlay的内容。

getLatSpanE6

public int getLatSpanE6()
返回值:
Overlay的纬度范围,在调用 populate() 过程中计算最北item和最南item之间的差值。

getLonSpanE6

public int getLonSpanE6()
返回值:
Overlay的经度范围,在调用populate()过程中计算最西和最东item之间的差值。横跨不连续经度的overlay在-180度时会报告非常大的范围。

populate

protected final void populate()
在一个新ItemizedOverlay上执行所有操作的工具方法。子类通过createItem(int)方法提供item。一旦有了数据,子类在调用其它方法前,首先调用这个方法。


setLastFocusedIndex

protected void setLastFocusedIndex(int lastFocusedIndex)
设置最近(或当前)焦点选中的item的索引,如果没有item被选中则设置为-1。应该记住这个,因为即使用户暂时平移远离了overlay,nextFocus(boolean)也能够重新按顺序浏览一个overlay。通常情况下,子类不需要去设置这个变量,因为当焦点变换时,变量可以自动更新。


setFocus

public void setFocus(Item item)
如果给定的item存在overlay中,强制其为焦点选中。任何注册的ItemizedOverlay.OnFocusChangeListener都将被通知。这不会移动地图,所以如果item不是在中心,用户会感到困惑。如果没有找到这个item,这是一个空操作。可以传递null取消焦点。


getFocus

public Item getFocus()
返回值:
当前焦点选中的item,如果当前没有item被焦点选中,返回null。

getLastFocusedIndex

public final int getLastFocusedIndex()
返回值:
最近焦点选中item的级别,如果从来没有焦点选中,则返回-1.

getItem

public final Item getItem(int position)
返回值:
给定索引对应的item。

nextFocus

public Item nextFocus(boolean forwards)
返回给定方向上下一个将要被焦点选中的item,如果已经到了行尾,返回null。如果以前没有焦点选中过,返回第一个item,如果没有item则返回null。


onTap

public boolean onTap(GeoPoint p,
                     MapView mapView)
处理一个点击事件。一个点击只有落到一个item上去时才会被处理,可以去覆盖onTap(int),返回true。

覆盖:
Overlay类中的onTap
参数:
p - 点击的位置点
mapView - 产生点击事件的MapView
返回值:
如果overlay处理了这个点击事件,返回true。

onSnapToItem

public boolean onSnapToItem(int x,
                            int y,
                            android.graphics.Point snapPoint,
                            MapView mapView)
检验给定的(x,y)是否足够接近引起当前动作(例如缩放)的item。

详细说明::
接口Overlay.Snappable中的onSnapToItem
参数:
x - x屏幕坐标。
y - y屏幕坐标。
snapPoint - 用距离给定点(x,y)最近的兴趣点(屏幕坐标)填充。如果没有点击,则不可触摸。
mapView - 请求点击的MapView。 使用MapView.getProjection()在屏幕像素和经纬度对之间变换。
返回值:
是否点击了兴趣点

onTrackballEvent

public boolean onTrackballEvent(android.view.MotionEvent event,
                                MapView mapView)
描述是从类Overlay拷贝而来
处理一个跟踪球事件。默认情况下,不做任何动作,返回false。

Overrides:
Overlay中的onTrackballEvent
Parameters:
event - 动作事件。
mapView - 产生跟踪球事件的MapView
Returns:
如果overlay处理了点击事件,返回true。

onKeyUp

public boolean onKeyUp(int keyCode,
                       android.view.KeyEvent event,
                       MapView mapView)
描述拷贝自Overlay
处理一个按键放开事件。默认情况下,不做任何动作,返回false。

Overrides:
Overlay中的onKeyUp
Parameters:
keyCode - 键码值。
event - 按键事件
mapView - 产生按键事件的MapView
Returns:
如果overlay处理了点击事件,返回true。

onTouchEvent

public boolean onTouchEvent(android.view.MotionEvent event,
                            MapView mapView)
描述拷贝自Overlay
处理一个按键放开事件。默认情况下,不做任何动作,返回false。

Overrides:
Overlay中的onTouchEvent
Parameters:
event - 动作事件
mapView - 产生按键事件的MapView
Returns:
如果overlay处理了点击事件,返回true。

hitTest

protected boolean hitTest(Item item,
                          android.graphics.drawable.Drawable marker,
                          int hitX,
                          int hitY)
检查给定的点击测试点是否在一个item标记点范围内。覆盖修改了一个item点击测试的方法。点击点相对于标记点的范围。默认的实现只检查点击点是否在标记点的可触摸范围内。

Parameters:
item - 进行点击测试的item
marker - item的标记点
hitX - 检查点的x坐标
hitY -检查点的y坐标
Returns:
如果点击测试点在标记点范围内,返回true。

setOnFocusChangeListener

public void setOnFocusChangeListener(ItemizedOverlay.OnFocusChangeListener l)

setDrawFocusedItem

public void setDrawFocusedItem(boolean drawFocusedItem)
设置是否绘制焦点选中的item。默认情况是绘制这个item,但一些用户更偏好于自己去绘制焦点选中的item。

Parameters:
drawFocusedItem -

onTap

protected boolean onTap(int index)
覆盖这个方法去处理一个item上的"点击"事件。这可能是对屏幕上item的触摸点击,或者对位于中心且已选定的item的跟踪球点击。默认情况下,什么都不做,返回false。

Returns:
如果点击事件被处理,返回true;如果想要把这个事件传递给其它overlay,返回false。