复制Google地图底部面板向上滑动

时间:2014-02-17 10:43:59

标签: android animation android-animation

我正在尝试复制Google地图的底部面板向上滑动动画:

  1. 点按地图标记会显示底部面板(标题)的小部分
  2. 在标题面板上向上滑动会显示一个包含更多信息的全尺寸面板。
  3. 向下滑动全尺寸面板恢复视图至仅标题
  4. 点按标记,底部面板显示
  5. 使用TranslationAnimation,我可以在点击标记时让底部面板动画显示。我遇到的问题是,在动画结束时,我必须将其视图设置为VISIBLE,以便面板显示,但随后整个面板显示而不仅仅是顶部标题部分。

    我目前正在使用包含LinearLayout的FrameLayout作为我的底部面板视图:

    <FrameLayout
            android:id="@+id/viewBottomPane"
            android:layout_width="match_parent"
            android:visibility="gone"
            android:background="#000000"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|bottom">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <include
                    android:id="@+id/paneHeader"
                    layout="@layout/headerPanel" />
                <TextView
                    android:id="@+id/paneFooter"
                    android:text=""
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>
                </LinearLayout>
        </FrameLayout>
    

    我想在地图标记点按下显示paneHeader,然后向上滑动以显示完整viewBottomPane,向下滑动以显示paneHeader并点按标记以隐藏所有内容。

1 个答案:

答案 0 :(得分:18)

之前我曾使用过这个库,并且工作得非常好。

  

https://github.com/umano/AndroidSlidingUpPanel

文档说明了这个

  

此代码主要基于开源的SlidingPaneLayout   Android支持库的r13中的组件。谢谢Android   球队!

我曾尝试使用 Android 2.3.6 ,但效果非常好。不知道你是否需要它向后兼容,但如果这样做会有所帮助。

你有xml部分

<com.sothree.slidinguppanel.SlidingUpPanelLayout
    android:id="@+id/sliding_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="bottom">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="Main Content"
        android:textSize="16sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center|top"
        android:text="The Awesome Sliding Up Panel"
        android:textSize="16sp" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>

你班上的听众

SlidingUpPanelLayout layout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);
        layout.setShadowDrawable(getResources().getDrawable(R.drawable.above_shadow));
        layout.setAnchorPoint(0.3f);
        layout.setPanelSlideListener(new PanelSlideListener() {
            @Override
            public void onPanelSlide(View panel, float slideOffset) {
                Log.i(TAG, "onPanelSlide, offset " + slideOffset);
                if (slideOffset < 0.2) {
                    if (getActionBar().isShowing()) {
                        getActionBar().hide();
                    }
                } else {
                    if (!getActionBar().isShowing()) {
                        getActionBar().show();
                    }
                }
            }

            @Override
            public void onPanelExpanded(View panel) {
                Log.i(TAG, "onPanelExpanded");

            }

            @Override
            public void onPanelCollapsed(View panel) {
                Log.i(TAG, "onPanelCollapsed");

            }

            @Override
            public void onPanelAnchored(View panel) {
                Log.i(TAG, "onPanelAnchored");

            }
        });

此外,您可以通过视图说明将触发窗格活动。

希望它有所帮助! :)