0

我的應用程序中的一項活動需要顯示具有預定地圖引腳位置的靜態地圖(本地png文件)。靜態地圖的大小爲480像素×904像素,我使用滾動視圖實現了該視圖,以便我可以上下滾動以查看地圖及其各種引腳位置。這些引腳被實現爲ImageButtons(以編程方式創建而不是使用xml),並點擊它們將啓動其他相應的新活動。我想知道如何實現一個簡單的縮放功能,用戶可以在地圖上的任意位置雙擊並放大(例如2倍)到拍攝區域(因此拍攝區域周圍的引腳ImageButton將被縮放也)。將不會出現夾捏或多點觸摸動作,只需簡單的雙擊即可放大拍攝區域,然後再次雙擊即可縮小。順便說一下,我的活動只處於橫向模式,所以無需擔心切換方向。有任何建議嗎?如何使用圖釘按鈕(ImageButtons)實現靜態地圖的簡單縮放?

下面是活動

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rlayoutResultMap" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:padding="0dp" > 

    <ScrollView 
     android:id="@+id/scrollResultMap" 
     android:fillViewport="true" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:scrollbars="none" > 

     <RelativeLayout 
      android:id="@+id/rlayoutScrollMap" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" > 

      <ImageView 
       android:id="@+id/imgResultMap" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_alignParentTop="true" 
       android:src="@drawable/map_base"/> 

     </RelativeLayout> 
    </ScrollView> 
    ... 
</RelativeLayout> 

一個我的XML文件的一部分這裏是我的Java類的部分:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.result_map); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    mapLocArray = getMapCoordinates(); 

    RelativeLayout rl = (RelativeLayout) findViewById(R.id.rlayoutResultMap); 

    // Loop through and create the map location buttons 
    int x, y; 
    for (int i=1; i<=maxMapLoc; i++) { 
     mapLocation = i; 
     ImageButton btnMapLoc = new ImageButton(ResultMapActivity.this); 
     RelativeLayout.LayoutParams vp = new RelativeLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     x = mapLocArray[i-1].getX(); 
     y = mapLocArray[i-1].getY(); 
     vp.setMargins(x,y,0,0);   
     btnMapLoc.setLayoutParams(vp); 
     btnMapLoc.setBackgroundColor(Color.TRANSPARENT); 
     btnMapLoc.requestLayout(); 

     String imgNameNormal = "map_loc_" + mapLocation + "_normal"; 
     int idNormal = getResources().getIdentifier(imgNameNormal,"drawable",getPackageName()); 
     btnMapLoc.setImageResource(idNormal); 

     rl.addView(btnMapLoc, vp); 

     ... 
    } 
    ...   
} 

在此先感謝。

回答

1

爲什麼你不把Ÿ

<ZoomButton 
android:id="@+id/zoomButton1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBottom="@+id/imageButton1" 
android:layout_centerHorizontal="true" 
android:src="@android:drawable/btn_plus" /> 

,以便用戶知道該怎麼做。 當你使用2 *製表符時,你必須啓動第一個標籤計時器任務,當用戶再次提示第二個選項卡時,必須在定時器任務中執行必須放大的***毫秒。

而得到放大的圖像可以使用

int zoom = 2; 
Bitmap i = Bitmap.createScaledBitmap(image, image.getWidth() * zoom, image.getHeight() * zoom, false); 

我希望我理解你的問題的權利。

+0

Thaks的建議。因爲我發佈了這個問題,所以我找到了一種方法來實現雙擊手勢監聽器,所以我不需要按照您的建議定義縮放按鈕。但是,我嘗試了類似於您的建議的內容,但返回的圖像變量爲空。我通過以下方式定義了變量圖像:'Bitmap image = BitmapFactory.decodeResource(getResources(),R.id.imgResultMap);'其中imgResultMap在上面列出的xml中定義。任何想法爲什麼?另外,由於我的地圖還包含地圖引腳的ImageButton,所以我想在放大地圖時縮放它們。這可以做到嗎?謝謝。 – Kenny

+1

解決了問題。原來我應該使用R.drawable.imgResultMap,它工作正常。然而,有沒有辦法對RelativeLayout進行類似的調整,特別是因爲我有ImageView和多個ImageButtons?另外,我如何告訴它將最終圖像定位在雙拼的位置? – Kenny

+0

我最終對佈局中的每個元素執行了調整。不是最漂亮的,但它的工作原理。仍然會很高興知道如何定位縮放圖像,以便雙擊區域位於屏幕中間。無論如何,這個答案都會被接受。謝謝菲爾! – Kenny