3

My App has a Parent Layout which shows Google Map with current location and there is a child layout which animate up from bottom of screen over google Map but only to half of screen . I managed to do that all with following code .

Animations for slide up and slide down :

slide_down.xml

 <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <objectAnimator
                android:interpolator="@android:anim/accelerate_decelerate_interpolator"
                android:propertyName="yFraction"
                android:valueType="floatType"
                android:valueFrom="0.58"
                android:valueTo="1.0"
                android:duration="@android:integer/config_mediumAnimTime"/>
        <objectAnimator
                android:interpolator="@android:anim/accelerate_decelerate_interpolator"
                android:propertyName="alpha"
                android:valueType="floatType"
                android:valueFrom="1"
                android:valueTo="0"
                android:duration="@android:integer/config_mediumAnimTime"/>
    </set>

slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="yFraction"
            android:valueType="floatType"
            android:valueFrom="1.0"
            android:valueTo="0.58"
            android:duration="@android:integer/config_mediumAnimTime"/>
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="alpha"
            android:valueType="floatType"
            android:valueFrom="0.58"
            android:valueTo="1.0"
            android:duration="@android:integer/config_mediumAnimTime"/>
</set>

Main Activity:

     public class MainActivity extends FragmentActivity implements LocationListener{

            GoogleMap googleMap;
            private static final String LIST_FRAGMENT_TAG = "list_fragment";
            Location mlocation;
            String mLastUpdateTime;
            double latitude;
            double longitude;
            int Radius = 100;
        Boolean flag = false ;



            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.maps);
                googleMap = mapFragment.getMap();
                googleMap.setMyLocationEnabled(true);

                LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

                Criteria criteria = new Criteria();
                String bestProvider = locationManager.getBestProvider(criteria, true);
                mlocation = locationManager.getLastKnownLocation(bestProvider);
                if (mlocation != null) {
                    onLocationChanged(mlocation);
                }
                locationManager.requestLocationUpdates(bestProvider, 20000, 0, this);

   }

            @Override
            public void onLocationChanged(Location location) {
                mlocation = location;
                latitude = location.getLatitude();

                longitude = location.getLongitude();
                LatLng latLng = new LatLng(latitude, longitude);
                long atTime = mlocation.getTime();
                mLastUpdateTime = DateFormat.getTimeInstance().format(new Date(atTime));

                googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                View marker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);

                CameraPosition INIT =
                        new CameraPosition.Builder()
                                .target(latLng)
                                .zoom(17.5F)
                                .bearing(300F) // orientation
                                .tilt(50F) // viewing angle
                                .build();
                googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(INIT));

                googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 13));

                googleMap.addMarker(new MarkerOptions()
                        .position(latLng)
        //                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE))
                        .icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(this, marker)))
                        .title(getAdress())
                .snippet("Radius: " + Radius)).showInfoWindow();

                googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

                    @Override
                    public boolean onMarkerClick(Marker marker) {
                        flag = true;
                        toggleList();
                        return true;
                    }

                });

                if(flag == false){
                    googleMap.getUiSettings().setAllGesturesEnabled(true);

                }

            private void toggleList() {
                Fragment f = getFragmentManager().findFragmentByTag(LIST_FRAGMENT_TAG);
                googleMap.getUiSettings().setAllGesturesEnabled(true);




                if (f != null) {
                    getFragmentManager().popBackStack();
                } else {
                    getFragmentManager().beginTransaction()
                            .setCustomAnimations(R.animator.slide_up,
                                    R.animator.slide_down,
                                    R.animator.slide_up,
                                    R.animator.slide_down)
                    .add(R.id.list_fragment_container, SlidingListFragment
                                    .instantiate(this, SlidingListFragment.class.getName()),
                            LIST_FRAGMENT_TAG
                            )


                            .addToBackStack(null).commit();
                    googleMap.getUiSettings().setAllGesturesEnabled(false);

                }

Child Layout

<?xml version="1.0" encoding="utf-8"?>

<com.trickyandroid.fragmenttranslate.app.view.SlidingRelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
    android:id="@+id/hidden_panel"
    android:background="#ffffffff">

    <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</com.trickyandroid.fragmenttranslate.app.view.SlidingRelativeLayout>

Parent Layout

    <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"
               tools:context="com.trickyandroid.fragmenttranslate.app.MainActivity">
    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/maps"
        class="com.google.android.gms.maps.SupportMapFragment"/>

        <FrameLayout
                android:id="@+id/list_fragment_container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

    </RelativeLayout>

Problem is

if Map is zoom-in to extend that if child layout slide up then my map marker gets hide behind the child layout . I want in this situation , my map should little slide up automatically .

Just like Whatsspp chat window . When we click for keyboard in it , chat window slide upward automatically or Friend Locator App .

young_08
  • 1,196
  • 2
  • 13
  • 35
  • I have answered something similar, have a look at this http://stackoverflow.com/questions/25235681/how-can-i-create-a-keyboard-listener-in-android/25236782#25236782 you can detect when keyboard appear & work respectively – Syed Nazar Muhammad Oct 09 '15 at 07:41
  • http://stackoverflow.com/questions/23925907/slidedown-and-slideup-layout-with-animation-android/23926196#23926196 view this answer – Ando Masahashi Oct 09 '15 at 07:43
  • @SyedNazarMuhammad: but how can i use it for Google maps zoom in and animation respectively ? – young_08 Oct 09 '15 at 07:44
  • @AndoMasahashi:hey , Problem is not for animating to center . My problem is when my view animate on zoom- in google Map (Parent Layout) it hides my marker on google map . I want ,my google map to slide upward automatically so that my animate view as well marker – young_08 Oct 09 '15 at 07:47
  • i can suggest you to change camera position of map when slide up and down. @young_08 – Ando Masahashi Oct 09 '15 at 07:53
  • @AndoMasahashi : i am also hit and trying in that direction but not getting success . Please if u could help me with code would be very great-ful . – young_08 Oct 09 '15 at 07:58

1 Answers1

0

I think you should zoom to the marker in map first & then show the slide up animation.

You can use this link to zoom to a position.

Google Maps v2 - set both my location and zoom in

CameraUpdate center=
    CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044,
                                             -73.98180484771729));
CameraUpdate zoom=CameraUpdateFactory.zoomTo(15);

map.moveCamera(center);
map.animateCamera(zoom);
Community
  • 1
  • 1
Rachita Nanda
  • 4,509
  • 9
  • 42
  • 66