【问题标题】:Slide View from bottom Over the another layout从底部滑动视图在另一个布局上
【发布时间】:2016-01-07 01:38:03
【问题描述】:

我的应用程序有一个父布局,它显示带有当前位置的谷歌地图,还有一个子布局,它从屏幕底部向上动画到谷歌地图,但只到屏幕的一半。我设法用以下代码做到了这一切。

上下滑动动画:

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>

主要活动:

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

                }

子布局

<?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>

父布局

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

问题是

如果地图是放大的,如果子布局向上滑动,那么我的地图 标记隐藏在子布局后面。我想在这种情况下, 我的地图应该不会自动向上滑动。

就像 Whatsspp 聊天窗口一样。当我们点击其中的键盘时, 聊天窗口自动向上滑动或朋友定位器应用程序。

【问题讨论】:

  • 我已经回答了类似的问题,看看这个stackoverflow.com/questions/25235681/…你可以分别检测键盘何时出现和工作
  • @SyedNazarMuhammad:但是我如何分别将它用于 Google 地图放大和动画?
  • @AndoMasahashi:嘿,问题不在于动画到 center 。我的问题是,当我的视图在放大的谷歌地图(父布局)上进行动画处理时,它会在谷歌地图上隐藏我的标记。我希望我的谷歌地图自动向上滑动,以便我的动画视图也标记
  • 我可以建议您在上下滑动时更改地图的相机位置。 @young_08

标签: android google-maps android-animation google-maps-android-api-2


【解决方案1】:

我认为您应该先放大地图中的标记,然后显示上滑动画。

您可以使用此链接缩放到某个位置。

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

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多