3

我的应用程序有一个父布局,显示当前位置的谷歌地图,并有一个从谷歌地图屏幕底部动画的子布局,但只有一半的屏幕。我设法用下面的代码完成了这一切。从底部滑动视图在另一个布局

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

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聊天窗口。当我们点击其中的键盘时, 聊天窗口会自动向上滑动或Friend Locator App。

+0

我已经回答了类似的东西,看看这个http://stackoverflow.com/questions/25235681/how-can-i-create-a-keyboard-listener-in- android/25236782#25236782 你可以检测到键盘出现和工作分别 –

+0

http://stackoverflow.com/questions/23925907/slidedown-and-slideup-layout-with-animation-android/23926196#23926196查看此答案 –

+0

@ SyedNazarMuhammad:但我怎样才能将它用于Google地图放大和动画分别? –

回答

0

我认为你应该首先放大地图上的标记&然后显示向上滑动的动画。

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

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); 
相关问题