Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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 检测长按和长按_Java_Android - Fatal编程技术网

Java 检测长按和长按

Java 检测长按和长按,java,android,Java,Android,在这个函数中,我想实现“如果是长按,返回标志=真,否则打开平铺”` public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); long DownTime = event.getDownTime(); long UpTime = event.getEventTime(); lon

在这个函数中,我想实现“如果是长按,返回标志=真,否则打开平铺”`

 public boolean onTouchEvent(MotionEvent event) {
        int x=(int)event.getX();
        int y=(int)event.getY();
        long DownTime = event.getDownTime();
        long UpTime = event.getEventTime();
        long longPresstouch = UpTime - DownTime;
        int idxX=(x-mine.x)/mine.tileWidth;
        int idxY=(y-mine.y)/mine.tileWidth;
        if(longPresstouch > longTouchTime)
        {
            if(x>=mine.x&&y>=mine.y&&x<=(mine.mapWidth+mine.x)&&y<=(mine.y+mine.mapHeight)) {
                mine.setflag(new Mine.Point(idxX, idxY), true);
                invalidate();
            }
        }
        else if(event.getAction()==MotionEvent.ACTION_DOWN){
            if(x>=mine.x&&y>=mine.y&&x<=(mine.mapWidth+mine.x)&&y<=(mine.y+mine.mapHeight))  //in tile or out tile
            {
                mine.open(new Mine.Point(idxX,idxY),isFirst);
                isFirst=false;

                if(mine.tile[idxY][idxX].value==-1)
                {
                    mine.isDrawAllMine=true;
                    new AlertDialog.Builder(context)
                            .setCancelable(false)
                            .setMessage("GameOver,你踩到地雷啦!")
                            .setPositiveButton("再来一局", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    mine.init();
                                    isFalse=true;
                                    isFirst=true;
                                    invalidate();
                                }
                            })
                            .setNegativeButton("退出游戏", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    System.exit(0);
                                }
                            })
                            .create()
                            .show();
                }
                if(isFalse)
                {
                    isFalse=false;
                    invalidate();
                    return true;
                }
                logic();
                invalidate();
            }
        }
        return true;
    }
public boolean onTouchEvent(运动事件){
int x=(int)event.getX();
int y=(int)event.getY();
长时间停机=event.getDownTime();
长正常运行时间=event.getEventTime();
long longPresstouch=正常运行时间-停机时间;
int idxX=(x-mine.x)/mine.tileWidth;
int idxY=(y-mine.y)/mine.tileWidth;
如果(长按触摸>长按时间)
{

如果(x>=mine.x&&y>=mine.y&&x=mine.y&&x每个扩展
Android.view.view
的Android组件都将有这两种方法

  • View.setOnClickListener()
    如果单击

  • View.setOnLongClickListener()
    如果长时间单击,请确保它是
    View.isLongClickable()
    返回true,或者通过调用
    View.setLongClickable(true)
    进行设置


  • 因为你是在对向下做出反应并显示对话框。因为你是在立即对向下事件做出反应,所以你从不等待看它是否是长按。这就是为什么android中的触摸事件通常发生在向上事件上-因此你可以判断触摸是否是按下、长按、手势等


    另外,正如另一张海报所说,点击和长时钟是内置事件。除非您想捕获更复杂的行为,否则没有理由编写onTouchEvent。

    计算动作向下和动作向上之间的时间差。如果时间差大于1000毫秒,则返回true,否则打开互动程序。

    提供文本和Giv形式的其他代码e更详细的信息,如是使用RecyclerView还是什么?不要将代码作为图像发布。这无助于为问题画布中的单个单元格提供选项看起来OP正在编写扫雷器,但没有每个单元格的视图