Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Re-size a Map in Run time

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.

like image 453
Ark Avatar asked Feb 11 '14 04:02

Ark


Video Answer


1 Answers

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;
    }
}
like image 78
Manjunath Avatar answered Oct 06 '22 00:10

Manjunath