Ограничить нижний лист проведите пальцем вниз - PullRequest
0 голосов
/ 21 сентября 2018

Я создал действие с поведением нижнего листа.Я делюсь макетом XML здесь

<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/video_details_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/backgroundColor"
app:behavior_hideable="true"
app:behavior_peekHeight="@dimen/player_sheet_peek_height"
app:layout_behavior="@string/bottom_sheet_behavior">

<LinearLayout
    android:id="@+id/detailsLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/mainMediaFrame"
        android:layout_width="match_parent"
        android:layout_height="@dimen/zero_dimen"
        android:layout_weight="0.35"
        android:background="@android:color/black">

        <com.google.android.exoplayer2.ui.SimpleExoPlayerView
            android:id="@+id/exoPlayerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            app:resize_mode="fit"
            app:surface_type="texture_view" />


    </FrameLayout>
    <android.support.v4.widget.NestedScrollView
        android:id="@+id/videoScroller"
        style="@style/scrollBarStyle"
        android:layout_height="@dimen/zero_dimen"
        android:layout_weight="0.65"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

         <!--todo:include scroll view content layout-->

    </android.support.v4.widget.NestedScrollView>
</LinearLayout>

</RelativeLayout>

После реализации я могу свернуть нижний лист прикосновением и перетащить любое из представлений в этом макете.Но я хочу закрыть лист, перетаскивая вид видео (mainMediaFrame) в макет.То есть я не хочу отклонять нижний лист, прокручивая вложенный вид прокрутки.Как мне этого добиться?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Вы пробовали:

<RelativeLayout 
    ...
    app:layout_behavior="@string/bottom_sheet_behavior"
    app:behavior_peekHeight="@dimen/player_sheet_peek_height"
    app:behavior_hideable="false">
0 голосов
/ 05 октября 2018
private class ScrollTouchListener implements View.OnTouchListener {
public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mVideoDetailsView.setNestedScrollingEnabled(true);
            activityLockBehavior.setAllowUserDragging(false);
            break;
        case MotionEvent.ACTION_MOVE:
            mVideoDetailsView.setNestedScrollingEnabled(true);
            activityLockBehavior.setAllowUserDragging(false);
            break;
        case MotionEvent.ACTION_UP:
            mVideoDetailsView.setNestedScrollingEnabled(false);
            activityLockBehavior.setAllowUserDragging(true);
            break;
    }
    return false;
}
}

Добавлен этот слушатель прокрутки во вложенный просмотр прокрутки

mNestedScrollView.setOnTouchListener(new ScrollTouchListener());
0 голосов
/ 21 сентября 2018

Приведенное ниже решение не будет перетаскивать нижнюю страницу, если пользователь касается VideoView.

Концепция проста

  • Отключить касание VideoView
  • Отключить перетаскивание при касании пользователяVideoView

В вашей деятельности

final LockBottomSheetBehaviour behavior = (LockBottomSheetBehaviour) LockBottomSheetBehaviour.from(bottomSheet);
findViewById(R.id.videoView).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                behavior.setAllowUserDragging(false);
                break;
            case MotionEvent.ACTION_UP:
                behavior.setAllowUserDragging(true);
                break;
        }
        return true;
    }
});

В макете замените

app:layout_behavior="android.support.design.widget.BottomSheetBehavior"

на

app:layout_behavior="com.package.LockBottomSheetBehaviour"

LockBottomSheetBehaviour.class

import android.content.Context;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.CoordinatorLayout;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class LockBottomSheetBehaviour<V extends View> extends BottomSheetBehavior<V> {
    private boolean mAllowUserDragging = true;

    public LockBottomSheetBehaviour() {
        super();
    }

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

    public void setAllowUserDragging(boolean allowUserDragging) {
        mAllowUserDragging = allowUserDragging;
    }

    @Override
    public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
        if (!mAllowUserDragging) {
            return false;
        }
        return super.onInterceptTouchEvent(parent, child, event);
    }
}
...