如何使用pin按钮(ImageButtons)实现静态地图的简单缩放?

时间:2012-05-11 16:50:09

标签: android android-layout android-widget scrollview imagebutton

我的应用中的一项活动需要显示具有预定地图引脚位置的静态地图(本地png文件)。静态地图的大小为480像素x 904像素,我用滚动视图实现它,这样我就可以上下滚动查看地图及其各种引脚位置。这些引脚实现为ImageButtons(以编程方式创建而不是使用xml),单击它们将启动其他相应的新活动。我想知道如何实现一个简单的缩放功能,用户可以在地图上的任何地方双击,它将放大(例如2倍)到分接区域(因此,在分接区域周围的引脚ImageButtons将被缩放也)。不会有捏合或多点触摸操作,因此只需简单的双击即可放大拍摄区域,再次双击可缩小。顺便说一句,我的活动只是横向模式,因此无需担心切换方向。有什么建议吗?

以下是我的活动

的xml文件的一部分
<?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>

这是我的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 个答案:

答案 0 :(得分:1)

为什么你不做y

<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 *选项卡进行制作时,您必须首先选择计时器任务,然后当用户再次按下第二个选项卡时,您必须在计时器任务中实现*** ms放大。

要获得缩放的图像,您可以使用

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

我希望我能理解你的问题。