标签: android-swipe

在 recyclerView 中使用滑动触摸监听器时,指定为非 null 的错误参数为 null - Android

我使用下面的方法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)

android kotlin android-recyclerview android-swipe

7
推荐指数
1
解决办法
1793
查看次数

MotionLayout - OnSwipe 不适用于可点击的子项

我遇到了一个问题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)

以下是我尝试过但无法正常工作的所有内容:

  1. 覆盖可点击视图的onInterceptTouchEventViewGroup视图(此处仅返回 true 将导致我想要的滑动行为,但随后应该可点击的子视图不再可点击。)
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { …
Run Code Online (Sandbox Code Playgroud)

android android-animation android-touch-event android-swipe android-motionlayout

7
推荐指数
1
解决办法
4763
查看次数

如何使用自定义项适配器在ListFragment中实现右键滑动?

我需要的是检测项目的正确滑动并显示一些活动.我做了上一个.调查,但似乎没有明显的正确解决方案.请帮我.

我的代码如下.

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

6
推荐指数
3
解决办法
595
查看次数