向上滑动面板 - google mapfragment下的细线滑动面板

时间:2015-06-20 08:57:08

标签: android android-framelayout slidingmenu slidingpanelayout

我使用此存储库https://github.com/dlukashev/AndroidSlidingUpPanel-foursquare-map-demo

制作了slidinguppanel

但是,它包含一个未在任何地方覆盖的错误。

当我触摸任何地方展开面板(listview)效果很好,但是当我试图通过按住列表视图的顶部(屏幕2上的蓝线)来展开它时,面板隐藏在地图下(framelayout)( SCREEN3)

在mapfragment下的蓝线隐藏面板和listview的其余部分是如何扩展的呢?

任何想法为什么?请给我一个提示如何解决它?

请看屏幕:

http://i.stack.imgur.com/G88Ok.jpg

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <org.sothree.slidinguppanel.SlidingUpPanelLayout
        android:id="@+id/slidingLayout"
        android:gravity="bottom"
        app:shadowHeight="0dp"
        app:paralaxOffset="@dimen/paralax_offset"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <FrameLayout
            android:gravity="top"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/button">

            <RelativeLayout
                android:id="@+id/mapContainer"
                android:layout_width="fill_parent"
                android:layout_height="497dp"/>
        </FrameLayout>

        <RelativeLayout
            android:id="@+id/slidingContainer"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/button">

            <View
                android:id="@+id/transparentView"
                android:visibility="gone"
                android:layout_width="fill_parent"
                android:layout_height="@dimen/map_height"
                android:layout_alignParentTop="true"/>

            <ListView
                android:id="@+id/listView1"
                android:cacheColorHint="@android:color/white"
                android:drawSelectorOnTop="true"
                android:dividerHeight="@dimen/divider_height"
                android:divider="@android:color/darker_gray"
                android:background="@android:color/transparent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_below="@id/transparentView"
                android:smoothScrollbar="true"
                android:layout_marginTop="0dp"/>

        </RelativeLayout>

    </org.sothree.slidinguppanel.SlidingUpPanelLayout>

</RelativeLayout>

1 个答案:

答案 0 :(得分:3)

您需要覆盖ListView

public class LockableListView extends ListView {

private boolean mScrollable = true;

public LockableListView(Context context) {
    super(context);
}

public LockableListView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public LockableListView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public void setScrollingEnabled(boolean enabled) {
    mScrollable = enabled;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // if we can scroll pass the event to the superclass
            if (mScrollable) {
                return super.onTouchEvent(ev);
            }
            // only continue to handle the touch event if scrolling enabled
            return mScrollable; // mScrollable is always false at this point
        default:
            return super.onTouchEvent(ev);
    }
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    // Don't do anything with intercepted touch events if
    // we are not scrollable
    if (!mScrollable) {
        return false;
    } else {
        return super.onInterceptTouchEvent(ev);
    }
}

}

然后在需要时添加禁用滚动

private void collapseMap() {
    mSpaceView.setVisibility(View.VISIBLE);
    mTransparentView.setVisibility(View.GONE);
    if (mMap != null && mLocation != null) {
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mLocation, 11f), 1000, null);
    }
    mListView.setScrollingEnabled(true);
}

private void expandMap() {
    mSpaceView.setVisibility(View.GONE);
    mTransparentView.setVisibility(View.INVISIBLE);
    if (mMap != null) {
        mMap.animateCamera(CameraUpdateFactory.zoomTo(14f), 1000, null);
    }
    mListView.setScrollingEnabled(false);
}

我将此更改推送到GitHub https://github.com/dlukashev/AndroidSlidingUpPanel-foursquare-map-demo/commit/7b869394e9d197e6f56a833804426577dcb8458a

享受