2017-01-25 27 views
0

ユーザーが指を離したときにボトムシートの表示を停止する方法はありますか(MotionEvent.ACTION_UP)、ボトムシートは常にコンテンツ全体を表示するために上に移動しています。ユーザーがドラッグを停止したときにボトムシートスクロールを停止する方法はありますか?

私はカスタムボトムシートの動作を実装しましたが、そのトリックをしているようには見えません。ここでは、ボトムシートの動作Javaコードのコードを示します。ここでまた

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


public class LockableBottomSheetBehavior\<V extends View\> extends BottomSheetBehavior<V> { 

    public LockableBottomSheetBehavior() {} 

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

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

    @Override 
    public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { 


     int action = MotionEventCompat.getActionMasked(event); 
     if(action == MotionEvent.ACTION_UP && getState() == BottomSheetBehavior.STATE_DRAGGING) { 
      Rect scrollBounds = new Rect(); 
      child.getGlobalVisibleRect(scrollBounds); //Should we set height of 
      setState(BottomSheetBehavior.STATE_EXPANDED); 
      return true; 
     } 
     return super.onTouchEvent(parent, child, event);; 
    } 

    @Override 
    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, V child, View directTargetChild, View target, int nestedScrollAxes) { 

     return super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); 

    } 

    @Override 
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target, int dx, int dy, int[] consumed) { 
     super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed); 

    } 

    @Override 
    public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target) { 
     super.onStopNestedScroll(coordinatorLayout, child, target); 

    } 

    @Override 
    public boolean onNestedPreFling(CoordinatorLayout coordinatorLayout, V child, View target, float velocityX, float velocityY) { 
     return super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY); 
    } 
}` 

私はその価値については

<?xml version="1.0" encoding="utf-8"?> 
<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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.mayojava.sample.bottomsheetdemo.MainActivity"> 

    <RelativeLayout 
     android:id="@+id/map_image_holder" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/map_image" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentStart="true" 
      android:layout_alignParentTop="true" 
      android:src="@drawable/map" 
      /> 

     <Button 
      android:id="@+id/show_view_btn" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:text="Show Bottom Sheet"/> 
    </RelativeLayout> 

    <ScrollView 
     android:id="@+id/layout_bottom_sheet" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:behavior_hideable="false" 
     app:behavior_peekHeight="400dp" 
     app:layout_behavior="com.snijsure.sample.bottomsheetdemo.LockableBottomSheetBehavior" 
     > 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dp" 
      android:layout_marginTop="20dp" 
      android:background="@android:color/white" 
      android:orientation="vertical" 
      > 

      <TextView 
       android:id="@+id/title_text1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" 
       android:text="@string/title1"/> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_curate_images" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/title_text1" 
       android:clipToPadding="false" 
       android:paddingBottom="8dp" 
       android:paddingTop="8dp" 
       android:visibility="visible"/> 

      <TextView 
       android:id="@+id/title_text2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/recycler_curate_images" 
       android:text="@string/title2"/> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_curate_images_second" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/title_text2" 
       android:clipToPadding="false" 
       android:paddingBottom="8dp" 
       android:paddingTop="8dp" 
       android:visibility="visible"/> 
     </RelativeLayout> 
    </ScrollView> 
</android.support.design.widget.CoordinatorLayout> 

This is link to video

+0

onTouchイベントでは、状態を拡張に設定しています。これは考えられる理由かもしれません。状態を折りたたみに設定してみてください。 –

+0

こんにちはNipun、なぜ私はシートを大きくする "停止"にしたいので、私はEXPANDEDとして状態を設定しています。しかし、これは、私が、「ドラッグ」イベントが開始されたときの状態、すなわちACTION_DOWNの状態を記録し、ACTION_UPの反対の状態に遷移する状態を記録すべきだと思うようにする。私はそれを試みます。 –

答えて

0

で働いていレイアウトファイルで、私はObservableScrollViewを使用してソリューションを実装しました。誰でも興味があればsample is located at。あなたも見つけることができますYoutube video implementation here

将来誰かがこのようなものを実装しようとしている場合に役立ちます。

関連する問題