我使用下面的方法class进行swipe检测recyclerView:
open class OnSwipeTouchListener(context: Context) : View.OnTouchListener {
var context: Context? = context
private val gestureDetector = GestureDetector(context, GestureListener())
fun onTouchs(event: MotionEvent): Boolean {
return gestureDetector.onTouchEvent(event)
}
private inner class GestureListener : GestureDetector.SimpleOnGestureListener() {
private val SWIPE_THRESHOLD = 100
private val SWIPE_VELOCITY_THRESHOLD = 100
override fun onDown(e: MotionEvent): Boolean {
return true
}
override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
onTouchs(e)
return true
}
override fun onFling(@NonNull e1: MotionEvent,
@NonNull e2: MotionEvent,
@NonNull velocityX: Float, …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题MotionLayout,如果用户在可点击的项目上开始滑动,则无法向上/向下滑动。我希望用户能够在屏幕的任何部分上滑动,并触发滑动过渡。
基本上,该行为与 Android 版 Yelp 应用程序当前的行为非常相似。在屏幕上的任意位置向上滑动会将搜索栏移动到屏幕顶部。请观看有关滑动行为的视频。
我的转换代码如下所示:
<Transition
app:constraintSetStart="@id/start"
app:constraintSetEnd="@id/end"
>
<OnSwipe
app:dragDirection="dragUp"
app:onTouchUp="decelerate"
/>
</Transition>
Run Code Online (Sandbox Code Playgroud)
我的代码看起来MotionLayout像这样:
<androidx.constraintlayout.motion.widget.MotionLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/motion_scene">
>
<!-- other views -->
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title"
android:textColor="@color/black"
android:textSize="14sp"
android:lineSpacingExtra="7sp"
android:fontFamily="@font/avenir"
android:layout_marginBottom="16dp"
/>
<GridView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="2"
android:verticalSpacing="8dp"
android:horizontalSpacing="12dp"
android:stretchMode="columnWidth"
tools:listitem="@layout/griditem" <!-- This layout file contains a single <Button/> -->
/>
</LinearLayout>
</androidx.constraintlayout.motion.widget.MotionLayout>
Run Code Online (Sandbox Code Playgroud)
以下是我尝试过但无法正常工作的所有内容:
onInterceptTouchEvent父ViewGroup视图(此处仅返回 true 将导致我想要的滑动行为,但随后应该可点击的子视图不再可点击。)override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { …Run Code Online (Sandbox Code Playgroud) android android-animation android-touch-event android-swipe android-motionlayout
我需要的是检测项目的正确滑动并显示一些活动.我做了上一个.调查,但似乎没有明显的正确解决方案.请帮我.
我的代码如下.
public class FragmentTwo extends ListFragment {
public FragmentTwo() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fragment_two, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ListView listView = getListView();
listView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
Toast.makeText(getContext(),"ACTION_UP", Toast.LENGTH_SHORT).show();
return true;
}
if(event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(getContext(),"ACTION_DOWN", Toast.LENGTH_SHORT).show();
return true;
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
Toast.makeText(getContext(),"ACTION_MOVE", Toast.LENGTH_SHORT).show();
return true;
}
return false;
} …Run Code Online (Sandbox Code Playgroud) java android android-listfragment android-touch-event android-swipe