2017-11-02 20 views
0

Hat es jemand geschafft, ein BottomSheet peekHeight zu animieren?BottomSheet dynamisch peekHeight animieren

ich zur Zeit folgendes:

 bottom_sheet?.let { 
      val behavior = BottomSheetBehavior.from(bottom_sheet) 
      behavior.peekHeight = 500 
      behavior.state = BottomSheetBehavior.STATE_COLLAPSED 
     } 

Die bottomsheet peek Höhe geändert wird, aber ich möchte eine Animation haben, wie wenn man den Zustand STATE_COLLAPSED-STATE_EXPANDED ändern.

+0

Haben Sie dies noch nicht gelöst? –

+0

Nein, ich habe das AndroidSlidingUpPanel verwendet – Ambi

Antwort

1

Ich konnte dies erreichen, indem ich RxJava und den Operator Interval nutzte, der alle 15 Millisekunden ausgeführt wird und die peekHeight bei jedem Auftreten des Intervalls änderte.

val interpolator = AccelerateDecelerateInterpolator() 
val refreshInterval = 20L 
val refreshCount = 15L 
val totalRefreshTime = (refreshInterval * refreshCount).toFloat() 
val startingHeight = bottomSheetBehavior.peekHeight 

animationDisposable = Observable.interval(refreshInterval, TimeUnit.MILLISECONDS) 
       .take(refreshCount) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe({ count: Long -> 
        if (show) { 
         val height = (startingHeight + (maxPeekHeight - minPeekHeight) * 
           interpolator.getInterpolation((count * refreshInterval)/totalRefreshTime)).toInt() 
         if (height > maxPeekHeight) { 
          bottomSheetBehavior.peekHeight = maxPeekHeight 
         } else { 
          bottomSheetBehavior.peekHeight = height 
         } 

        } else { 
         val height = (startingHeight - (maxPeekHeight - minPeekHeight) * 
           interpolator.getInterpolation((count * refreshInterval)/totalRefreshTime)).toInt() 

         if (height < minPeekHeight) { 
          bottomSheetBehavior.peekHeight = minPeekHeight 
         } else { 
          bottomSheetBehavior.peekHeight = height 
         } 
        } 
       }, { _: Throwable -> 
        //do something here to reset peek height to original 
       })