在特定时间内点击 ImageView 三次时触发一个动作 - Android

Trigger an Action when ImageView is tapped three times in Specific time - Android

我有一个项目需要计算 ImageView 上的触摸次数。如果用户连续三次触摸 ImageView,则触发一个动作。

我试过使用 setOnTouchListener,但找不到任何可以 return 整数计数器的方法。

这是我想要实现的目标的抽象视图:

if(touches == 3) {
//perform the action.
}

谁能告诉我如何计算 ImageView 上的手指触摸次数?另外,如果有更好的方法,请告诉我。

在您的 ActivityFragmentonTouchEvent 的实施中记录 ImageView 次触摸。如果您希望快速连续触摸 3 次,例如 "triple click",请使用 ArrayList 来记录从 SystemClock 开始的时间。如果差异低于您的阈值,则认为它触及 3 次。

如果您想每 3 次执行一次操作,请尝试此代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    public static int i = 0;
    ImageView myimage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myimage = (ImageView) findViewById(R.id.myimg);
        myimage.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case (R.id.myimg): {
                ++i;
                if (i % 3 == 0) {
//your logic here every 3rd attempt
// if you want to check it on only first 3 attempt if(i==3){some action}

                    Toast.makeText(this, "image is clicked", Toast.LENGTH_LONG).show();
                }
                break;
            }

        }
    }
}

给你伙计加code snippet

package com.pavneet.activitydemo.DB;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.pavneet.activitydemo.R;

/**
 * Created by Pavneet Singh on 20/06/16.
 */
public class TestA extends AppCompatActivity {

    private int i=0;
    private ImageView imageView;

    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.what==100){
                i=0;
            }
        }
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_ab);
        imageView=(ImageView) findViewById(R.id.imageButtontest);

        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (i==0){
                    ++i;
                    handler.sendEmptyMessageDelayed(100,3000); // 3000 equal 3sec , you can set your own limit of secs
                }else if(i==2){
                    Toast.makeText(TestA.this, "Three Touch Clicked" , Toast.LENGTH_SHORT).show();
                    i=0;
                    handler.removeMessages(100);
                }else
                    ++i;
            }
        });

    }
}

布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_margin="16dp"
    android:layout_height="match_parent">
<ImageView
    android:src="@mipmap/ic_launcher"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageButtontest"
        android:layout_gravity="center_horizontal" />
</LinearLayout>