我想检测三个手指点击在 Android 屏幕。我能够检测到两个手指。如何检测三个手指呢?
这段代码可以帮助你:
public boolean onTouchEvent(MotionEvent event)
{
int action = event.getAction();
switch(action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_POINTER_DOWN:
// multitouch!! - touch down
int count = event.getPointerCount(); // Number of 'fingers' in this time
break;
}
}
我被要求只处理三个手指点击使用上述解决方案,如果你点击4 & amp;5 手指和更多,你会得到 3 个手指触发onTouchEvent所以我必须实现我自己的解决方案,因为它是好的,我可以分享它。
所以这个想法是创建一个CountDownTimer,每当用户完成点击屏幕时,它将触发一个事件。
在这个例子中,我将numberOfFingers定义为3,所以当且仅当在屏幕上点击三个手指时,我才会显示 Toast。
你可以改变它,并得到任何数量的手指,你想跟踪
首先,创建一个新的 java 类并将其命名为FingerTapHandler
import android.os.CountDownTimer;
public class FingerTapHandler {
private final int numberOfTrackingFingers;
private int receivedNumOfFingers;
private final OnTouchTimerListener touchTimerListener;
public FingerTapHandler(int numberOfTrackingFingers, OnTouchTimerListener listener) {
this.numberOfTrackingFingers = numberOfTrackingFingers;
this.touchTimerListener = listener;
}
public void updateFingersCount(int fingers) {
reset();
this.receivedNumOfFingers = fingers;
}
private void reset() {
onTouchTimer.cancel();
onTouchTimer.start();
}
CountDownTimer onTouchTimer = new CountDownTimer(100, 100) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
if (receivedNumOfFingers == numberOfTrackingFingers) {
touchTimerListener.handleOnFinish();
}
}
};
}
我们还需要一个接口来处理 tap 事件:OnTouchTimerListener
public intece OnTouchTimerListener {
void handleOnFinish();
}
现在,你可以从上面的类创建一个新的实例,让你的活动跟踪水龙头的数量。
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements OnTouchTimerListener {
private FingerTapHandler fingerTapHandler;
private static final int numberOfFingers = 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fingerTapHandler = new FingerTapHandler(numberOfFingers, this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if ((action & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_DOWN) {
int fingers = event.getPointerCount();
fingerTapHandler.updateFingersCount(fingers);
}
return super.onTouchEvent(event);
}
@Override
public void handleOnFinish() {
Toast.makeText(this, "Tapped on screen with " + numberOfFingers + " fingers", Toast.LENGTH_SHORT).show();
}
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(4条)