2011-01-26 114 views
0

在我的Android應用程序中,我有一個自定義視圖,其功能類似於地圖。當用戶觸摸某個特定位置時,我希望能夠在某種信息泡泡中顯示更多信息。這與谷歌地圖API作品非常相似,但我不想使用他們的API。如何在地圖上創建信息氣泡(不是Google API)

到目前爲止,我已經嘗試直接繪製一個圓角矩形到畫布上,並在指定位置頂部繪製文本。但是這有相當大的缺點:

1)我不知道如何計算矩形相對於文本長度和大小的大小。

2)繪製矩形沒有留下的空間的視圖的力(與內置onTouch事件,以及室容易地自定義視圖)

我已經使用的圖(按鈕)來顯示信息也嘗試但沒有成功。據我所知,我無法指定視圖應該顯示的位置的座標(因爲信息氣泡需要根據地圖滾動的位置移動)。總之,我需要兩種方法中最好的方法,根據顯示的文本數量很容易調整圖像大小,信息氣泡應該能夠根據地圖滾動的位置在屏幕上移動。

有沒有人有什麼建議最好的辦法是創建一個這樣的信息泡沫,而不使用谷歌地圖API?

回答

0

我通過沒有辦法100%肯定,我提出的方法是正確的方法,但是這是我會怎樣的問題:

你首先需要你計算之前,計算你的文字的大小要執行此操作的框的大小,請使用以下方法,前提是您已創建了將用於繪製文本的Paint對象。

//This will give you the width of the text 
textPaint.measureText("Text to render") 

//This will give you the height of the text 
textPaint.getFontSpacing() 

在繪製地圖和信息泡沫而言,這是我會怎麼做:

你的整個地圖圖像將是你的基地中,而一部分是鑑於將是你的看法框。因此,如果用戶在地圖上平移和縮放,實際上發生的情況是您使用我們的視圖框僅顯示地圖的一部分。計算在視圖框中繪製泡泡的位置非常困難,但是如果相對於基礎框進行繪製,它變得非常容易。基本上,您將繪製包括氣泡在內的整個地圖,並將其裁剪到僅位於視圖中的部分。

這完全是我將如何去做,但我認爲這不會很難實現。所有你需要做的就是跟蹤你的視圖框偏離了你的基本框的左上角,並且你可以很容易地找到需要種植泡泡的相對於基本框的位置。

讓我知道如果我沒有解釋得很好。

最佳,

Ignus

+0

謝謝你,你的解決方案的作品。這裏是我用來繪製基於一些文本調整大小的圖像的代碼: int padding = 10; bmpLength = textPaint.measureText((String)this.getText()); bmpHeight = textPaint.getFontSpacing(); (x,y,(int)(x + bmpLength +(padding * 4)),(int)(y + bmpHeight + 2 * padding)),mPaint); (float)this.getText(),x +(padding * 2),(float)(y +(bmpHeight/2)+ 1.5 * padding),textPaint); – James 2011-01-29 01:22:46

1

一種方法是通過擴展布局,以創建一個氣球 - 例如LinearLayout中並覆蓋dispathDraw()實際上把剛纔的氣球。然後,您可以從佈局xml配置和使用您的Ballon,併爲內容添加textView。例如:

<mycustom.PopUpBalloon 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/transparent_panel" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="5px"> 
    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 
     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:text="default" 
      android:textColor="#ffffffff" 
      android:textStyle="bold" 
      /> 

    </RelativeLayout> 
</mycustom.PopUpBalloon> 

從你的活動,你可以再加載彈出:

mPopUp = (PopUpBalloon) layoutInflater.inflate(R.layout.popup, null); 

然後更改文本在您的活動:

// Remove any previous Popups from the holding View 
mView.removeView(mPopUp); 
mPopUp.setVisibility(View.VISIBLE); 
((TextView) mPopUp.findViewById(R.id.title)).setText("Hello World"); 

您還可以添加ImageViews或什麼到ClickListeners等氣球...

+0

這將是理想的解決方案,只要我能夠在地圖滾動時使PopUpBalloon視圖移動到特定的x-y位置。有任何想法嗎? – James 2011-01-26 21:33:07