Re-size a Map in Run time
Asked Answered
B

3

6

I want to resize my map dynamically in run-time by clicking on an arrow key. My layout is:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MapActivity" >

<fragment
 android:id="@+id/map"
 android:name="com.google.android.gms.maps.MapFragment"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_alignParentLeft="true"
 android:layout_alignParentRight="true"
 android:layout_alignParentTop="true" />

I think I have to use MapView and setLayoutParams but I am not sure how.Could someone help how I can do that? Thanks in advance.

Booma answered 11/2, 2014 at 4:41 Comment(1)
i m not tested this. but u can try this RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout); RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth, RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight); Rl.setLayoutParams(layout_description);Ramakrishna
E
5

Try this : 1) In xml:-

 <com.google.android.gms.maps.MapView
        android:id="@+id/map_view"
        android:layout_width="fill_parent"
        android:layout_height="150dip"
        android:background="@android:color/white" />

2) In Activity:-

    private GoogleMap mMap;
    private MapView mMapView;
    private boolean mMapViewExpanded = false;

    mMapView = (MapView)findViewById(R.id.map_view);
    mMap = mMapView.getMap();

    mMap.setOnMapClickListener(new OnMapClickListener() {
                        @Override
                        public void onMapClick(LatLng point) {
                            animateMapView();
                        }
                    });

    private void animateMapView() {
        Logging.d(LOG_TAG, "CLICKED ON THE MAPVIEW");
        RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) mMapView.getLayoutParams();

        ResizeAnimation a = new ResizeAnimation(mMapView);
        a.setDuration(250);

        if (!getMapViewStatus()) {
            mMapViewExpanded = true;
            a.setParams(lp.height, dpToPx(getResources(), 300));
        } else {
            mMapViewExpanded = false;
            a.setParams(lp.height, dpToPx(getResources(), 150));
        }
        mMapView.startAnimation(a);
    }

    private boolean getMapViewStatus() {
        return mMapViewExpanded;
    }

    public int dpToPx(Resources res, int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, res.getDisplayMetrics());
    }

3) ResizeAnimation.java

public class ResizeAnimation extends Animation {

    private int startHeight;
    private int deltaHeight; // distance between start and end height
    private View view;

    /**
     * constructor, do not forget to use the setParams(int, int) method before
     * starting the animation
     * 
     * @param v
     */
    public ResizeAnimation(View v) {
        this.view = v;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {

        view.getLayoutParams().height = (int) (startHeight + deltaHeight * interpolatedTime);
        view.requestLayout();
    }

    /**
     * set the starting and ending height for the resize animation starting
     * height is usually the views current height, the end height is the height
     * we want to reach after the animation is completed
     * 
     * @param start
     *            height in pixels
     * @param end
     *            height in pixels
     */
    public void setParams(int start, int end) {

        this.startHeight = start;
        deltaHeight = end - startHeight;
    }

    /**
     * set the duration for the hideshowanimation
     */
    @Override
    public void setDuration(long durationMillis) {
        super.setDuration(durationMillis);
    }

    @Override
    public boolean willChangeBounds() {
        return true;
    }
}
Enriqueenriqueta answered 11/2, 2014 at 5:28 Comment(1)
In my opinion this is the best solution here!Widescreen
P
3

Try the following :

GoogleMap mGoogleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
                R.id.map)).getMap();
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(100, 100); 
    // I have taken width and hieght 100X100 you can change it as per your need 
    ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
            R.id.map)).getView().setLayoutParams(layoutParams);

I tested this in Nexus 4,this will work for sure.

Parse answered 11/2, 2014 at 4:47 Comment(2)
Please keep in mind take layout params as per your parent layout type. if it's relativelayout,then take as in my answer and if it is LinearLayout then just replace RelativeLayout.LayoutParams to LinearLayout.LayoutParams. That's all.Parse
and if using a map within a fragment: ((MapFragment) getActivity().getFragmentManager().findFragmentById( R.id.gMap)).getView().setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,0.0f));Unconstitutional
R
1

Basic example using onKeyDown() method.

GoogleMap mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();


public boolean onKeyDown(int keyCode, KeyEvent event) {     
    if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
       ViewGroup.LayoutParams params = mMap.getView().getLayoutParams();
           params.height = 50;
         mMap.getView().setLayoutParams(params); 
    } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
        ViewGroup.LayoutParams params = mMap.getView().getLayoutParams();
            params.height = 100;
         mMap.getView().setLayoutParams(params);
    }
    return false;
}
Refurbish answered 11/2, 2014 at 4:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.