Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OnLongClickListener不使用onTouchListener_Java_Android - Fatal编程技术网

Java OnLongClickListener不使用onTouchListener

Java OnLongClickListener不使用onTouchListener,java,android,Java,Android,我正在制作一个记分板类,用来控制一个布局,让用户上下滑动以增加和减少分数;然后长按屏幕重置分数。我通过创建一个单独的OnSwipeTouchListener类,然后对正在被触摸的元素调用其中的方法,使OnTouchListener在这一点上正常工作。但在再次运行该程序后,我的LongClickListener已停止响应。我最好的猜测是TouchListener会自动覆盖其他所有内容,但我不确定。我将链接下面的相关类,以便任何人都能准确地看到我的实现。是否有人能对此提供帮助或推荐替代方案 Scor

我正在制作一个记分板类,用来控制一个布局,让用户上下滑动以增加和减少分数;然后长按屏幕重置分数。我通过创建一个单独的OnSwipeTouchListener类,然后对正在被触摸的元素调用其中的方法,使OnTouchListener在这一点上正常工作。但在再次运行该程序后,我的LongClickListener已停止响应。我最好的猜测是TouchListener会自动覆盖其他所有内容,但我不确定。我将链接下面的相关类,以便任何人都能准确地看到我的实现。是否有人能对此提供帮助或推荐替代方案

Scoreboard.java

package com.example.seth.sidespin;

import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.view.GestureDetectorCompat;

public class Scoreboard extends Fragment{

    private int counter_left = 0;
    private int counter_right = 0;


    private RelativeLayout rl_left, rl_right;
    private TextView tv_left, tv_right;




    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_scoreboard,null);


        rl_left = (RelativeLayout) view.findViewById(R.id.layout_left_score);
        rl_right = (RelativeLayout) view.findViewById(R.id.layout_right_score);
        tv_left =(TextView) view.findViewById(R.id.tv_left_score);
        tv_right = (TextView) view.findViewById(R.id.tv_right_score);




        rl_left.setOnTouchListener(new OnSwipeTouchListener(getContext()) {

            public void onSwipeUp() {

                counter_left++;
                tv_left.setText(Integer.toString(counter_left));

            }
            public void onSwipeDown() {
                if (counter_left > 0) {
                    counter_left--;
                }
                tv_left.setText(Integer.toString(counter_left));

            }
        });

        rl_right.setOnTouchListener(new OnSwipeTouchListener(getContext()) {

            public void onSwipeUp() {

                counter_right++;
                tv_right.setText(Integer.toString(counter_right));

            }
            public void onSwipeDown() {
                if (counter_right > 0) {
                    counter_right--;
                }
                tv_right.setText(Integer.toString(counter_right));

            }
        });


        rl_left.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                counter_left = 0;
                tv_left.setText(String.valueOf(counter_left));
                counter_right = 0;
                tv_right.setText(String.valueOf(counter_right));
                return true;
            }

        });

        rl_right.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                counter_right = 0;
                tv_right.setText(String.valueOf(counter_right));
                counter_left = 0;
                tv_left.setText(String.valueOf(counter_left));
                return true;
            }

        });




        return view;
    }




@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //you can set the title for your toolbar here for different fragments different titles
        getActivity().setTitle("Scoreboard");
    }

}
OnSwipeTouchListener.java

package com.example.seth.sidespin;

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

/**
 * Created by stins on 4/29/2017.
 */

public class OnSwipeTouchListener implements View.OnTouchListener {

    private final GestureDetector gestureDetector;

    public OnSwipeTouchListener(Context context) {
        gestureDetector = new GestureDetector(context, new GestureListener());
    }

    public void onSwipeUp() {
    }

    public void onSwipeDown() {
    }


    public boolean onTouch(View v, MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }

    private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

        private static final int SWIPE_DISTANCE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }


        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            float distanceX = e2.getX() - e1.getX();
            float distanceY = e2.getY() - e1.getY();
            if (Math.abs(distanceY) > Math.abs(distanceX) && Math.abs(distanceY) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                if (distanceY > 0)
                    onSwipeDown();
                else
                    onSwipeUp();
                return true;
            }
            return false;
        }


    }
}
我最好的猜测是TouchListener会自动覆盖其他所有内容,但我不确定

是的


尝试覆盖长按事件的
gesturedetor.SimpleOnGestureListener.onLongPress(MotionEvent)

gives.Gotcha!!我真的在onTouchSwipeListener.java类中重写了它吗?@KortneyStinson是的,更准确地说是
GestureListener
内部类非常感谢!知道了!