当前位置: 首页 > 知识库问答 >
问题:

将视图从底部滑动到另一个布局上

杨轶
2023-03-14

我的应用程序有一个显示当前位置的谷歌地图的父布局,还有一个子布局,在谷歌地图上从屏幕底部向上移动,但只移动到屏幕的一半。我用下面的代码实现了这一切。

向上滑动和向下滑动的动画:

滑下去。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聊天窗口一样。当我们点击其中的键盘时,聊天窗口会自动向上滑动或使用好友定位应用程序。

共有1个答案

国高杰
2023-03-14

我想你应该先放大地图上的标记

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

谷歌地图v2-设置我的位置并放大

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

map.moveCamera(center);
map.animateCamera(zoom);
 类似资料:
  • 布局(activity_main.xml): 活动(MainActivity.java): 动画: 谢了。

  • 我想创建一个应用程序,使用带有滑动视图的选项卡布局(类似于这样): 问题来了:我在网上到处找一个可以解释如何做这种事情的指南,但我所做的一切都对我不起作用。我在某个地方读到标签布局与Lollipop是不推荐的,所以我试图找到一个替代的方法来做我想做的事情,但什么也没有。我试图创建的每个选项卡布局应用程序在测试时都以崩溃告终,我认为这是由于的某些原因,总是因为选项卡在Lollipop中是不推荐的。我

  • 仿网易新闻的滑动栏目切换视图控件,具有以下特色: 1.支持手势左右滑动切换栏目视图。 2.支持点击栏目标题切换视图。 3.支持滑动到左边缘,拉出抽屉式菜单。 [Code4App.com]

  • 我想在我的应用程序中创建从下到上滚动的滑动菜单。我在活动的底部有一个按钮,当用户点击按钮时,菜单就会显示出来。当用户再次点击按钮时,菜单应该消失。用户还可以上下滑动以显示或消失菜单。 菜单可以像这个应用程序中的任何一个。做 请看下面的截图。你知道怎么做吗?你有什么建议吗?

  • 问题内容: 搜索后,我没有在网上或任何其他资源中找到任何东西,我想知道您是否可以通过联接另一个视图和一些其他表来形成一个视图?我猜类似的东西与Server_ref.part_notification_view是要加入的视图。 问题答案: 您当然可以在另一个视图的基础上建立一个视图: 但是您不能引用基础表中的任何内容,包括不属于视图的任何字段: 具有相同列的基础表不是问题,并且如果您在视图中包含的内

  • 我想把意图转移到Xamarin.Android中的另一个活动。基本上,我需要Intent.data和Intent.clipdata到另一个活动,所以我使用下面的代码来传输Intent,但我不知道检索它的正确方法。 下面是Main Activity中的代码 在第二活动中 如何在第二个活动中检索意图?