2016-02-29 54 views
1

我想将底部工作表用作底部的弹出窗口。我需要删除协调器布局中的拖动功能。我可以拨打防止用户拖动BottomSheet支持库23.2

bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 

如果我想动画视图。我只是试图阻止用户拖动他们的手指拉起视图。

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/coordinator_layout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:keepScreenOn="true" > 

    <LinearLayout 
     android:id="@+id/bottom_sheet" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:behavior_hideable="true" 
     app:layout_behavior="android.support.design.widget.BottomSheetBehavior" 
     android:orientation="vertical" > 

    <!-- view and stuff... --> 

    </LinearLayout> 

</android.support.design.widget.CoordinatorLayout > 

任何人有任何想法?

回答

1

如果您想要一个从底部自动显示的视图,而用户无法拖动它,那么底部图纸不是正确的部件。使用ViewGroup(LinearLayout,RelativeLayout,...)并设置其翻译Y,以使其初始在屏幕外。当您想要显示它时,请将该偏移的Y平移回到0。

您需要做的是在屏幕底部绘制视图,然后当您膨胀布局时,将其翻译为高度离开屏幕。

说出你的观点被称为“视图”,充气后,你可以这样做:

view.getViewTreeObserver().addOnPreDrawListener(new  ViewTreeObserver.OnPreDrawListener() { 
        @Override 
        public boolean onPreDraw() { 
         view.getViewTreeObserver().removeOnPreDrawListener(this); 
         view.setTranslationY(/* get the view top Y and translate to it becomes the bottom of the screen */); 
         return false; 
        } 
       }); 

然后,当你想动画,你这样做:

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "translationY", /* translation value calculated above */, 0); 
objectAnimator.setDuration(400); 
objectAnimator.setInterpolator(new DecelerateInterpolator()); 
objectAnimator.start(); 
+0

我已尝试过,但我遇到了问题,没有将屏幕视图关闭。 – DDukesterman

+0

查看我上面有关如何实现它的更新回答。 – Francesc

+0

我试试这个,让你知道!感谢这篇文章。 – DDukesterman