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>
onTouchイベントでは、状態を拡張に設定しています。これは考えられる理由かもしれません。状態を折りたたみに設定してみてください。 –
こんにちはNipun、なぜ私はシートを大きくする "停止"にしたいので、私はEXPANDEDとして状態を設定しています。しかし、これは、私が、「ドラッグ」イベントが開始されたときの状態、すなわちACTION_DOWNの状態を記録し、ACTION_UPの反対の状態に遷移する状態を記録すべきだと思うようにする。私はそれを試みます。 –