首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OnLongClickListener不使用onTouchListener

OnLongClickListener不使用onTouchListener
EN

Stack Overflow用户
提问于 2017-04-29 16:12:02
回答 1查看 325关注 0票数 1

我正在制作一个记分板类,用于控制用户上下滑动以增加和减少分数的布局;然后长时间单击屏幕以重置分数。现在,通过创建一个单独的OnTouchListener类,然后对正在被访问的元素调用它内部的方法,OnSwipeTouchListener就可以正常工作了。但是在再次运行程序之后,我的LongClickListener已经停止响应了。我最好的猜测是,TouchListener只会自动覆盖所有其他东西,但我不确定。下面我将链接相关的类,这样任何人都可以准确地看到我的实现。有没有人能在这方面提供帮助,或者推荐一种替代方案?

Scoreboard.java

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
        }


    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-29 16:20:27

我最好的猜测是,TouchListener只会自动覆盖所有其他东西,但我不确定。

是的,确实如此。

尝试为您的长新闻事件重写GestureDetector.SimpleOnGestureListener.onLongPress(MotionEvent)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43697840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档