2014-02-11 4 views
5

Я хочу динамически изменять размер моей карты во время выполнения, нажимая на клавишу со стрелкой. Моя раскладка:Изменение размера карты во время выполнения

<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" /> 

Я думаю, что я должен использовать MapView и setLayoutParams, но я не уверен, что кто-то поможет how.Could, как я могу это сделать? Спасибо заранее.

+0

им не испытал это. но вы можете попробовать этот «RelativeLayout Rl = (RelativeLayout) findViewById (R.id.relativelayout); RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.FILL_PARENT или YourUserDefinedwidth, RelativeLayout.LayoutParams.FILL_PARENT или YourUserDefinedHeight); Rl.setLayoutParams (layout_description); ' –

ответ

3

Попробуйте следующее:

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); 

Я испытал это в Nexus 4, это будет работать наверняка.

+0

Пожалуйста, имейте в виду, что нужно выполнить параметры макета в соответствии с вашим типом родительского макета. если это relativelayout, тогда возьмите, как в моем ответе, и если это LinearLayout, то просто замените RelativeLayout.LayoutParams на LinearLayout.LayoutParams. Это все. – TheLittleNaruto

+1

и если использовать карту внутри фрагмента: ((MapFragment) getActivity(). GetFragmentManager(). FindFragmentById ( R.id.gMap)). GetView(). SetLayoutParams (новые LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup. LayoutParams.MATCH_PARENT, 0.0f)); – Manny265

1

Основной пример использования метода onKeyDown().

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; 
} 
4

Попробуйте это: 1) В 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) В деятельности: -

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; 
    } 
} 
+1

По-моему, это лучшее решение здесь! – hardartcore

+0

да это лучшее! – David

Смежные вопросы