Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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
Javascript onTouch和onClick_Javascript_Android - Fatal编程技术网

Javascript onTouch和onClick

Javascript onTouch和onClick,javascript,android,Javascript,Android,我正试着做一个应用程序,这件事让我心碎。用户必须从我的12个图像视图中选择一个。如果它是正确的,但用户仅触摸它不到3秒钟,则会显示正常消息。但是,如果他/她触摸它超过3秒钟,就会触发一个新的和不同的信息 问题是,我有一个onClickListener来获取用户单击的ImageView的标记,并将其与正确的标记进行比较。如果正确,还必须进行下一步工作: 用户触摸它是否超过3秒?如果是,则显示消息,如果不是,则显示其他消息 @Override public void onClick(View

我正试着做一个应用程序,这件事让我心碎。用户必须从我的12个图像视图中选择一个。如果它是正确的,但用户仅触摸它不到3秒钟,则会显示正常消息。但是,如果他/她触摸它超过3秒钟,就会触发一个新的和不同的信息

问题是,我有一个onClickListener来获取用户单击的ImageView的标记,并将其与正确的标记进行比较。如果正确,还必须进行下一步工作: 用户触摸它是否超过3秒?如果是,则显示消息,如果不是,则显示其他消息

@Override
    public void onClick(View v) {
        if(v.getId()==R.id.btLogOut){    //this one is to see if the user clicked the logout Button
            DBH.deletePerson();
            finish();
            startActivity(new Intent(Fake.this, MainActivity.class));
            finish();
        }

       if(v.getTag().equals("the one who waits for the on touch")){
        ImageView x = (ImageView)findViewById(v.getId());
        x.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        lastDown = System.currentTimeMillis();
                        break;
                    case MotionEvent.ACTION_UP:
                        lastDuration = System.currentTimeMillis() - lastDown;
                        cambio(lastDuration);
                        break;
                }
                return false;
            }


             public void cambio(long ld){  //check time it has been touched
                    if (ld > 3000) {
                        Toast.makeText(getApplicationContext(), "YES", Toast.LENGTH_SHORT).show();
                        lastDuration = 0;

                    }

                    if (ld < 1000) {
                        lastDuration = 0;
                        Toast.makeText(getApplicationContext(), "NO", Toast.LENGTH_SHORT).show();
                    }
                }

                });
@覆盖
公共void onClick(视图v){
if(v.getId()==R.id.btLogOut){//这是为了查看用户是否单击了注销按钮
DBH.deletePerson();
完成();
startActivity(新意图(false.this,MainActivity.class));
完成();
}
if(v.getTag().equals(“等待触控的人”)){
ImageView x=(ImageView)findViewById(v.getId());
x、 setOnTouchListener(新视图。OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
lastDown=System.currentTimeMillis();
打破
case MotionEvent.ACTION\u UP:
lastDuration=System.currentTimeMillis()-lastDown;
坎比奥(最后期限);
打破
}
返回false;
}
public void cambio(long ld){//检查它被触摸的时间
如果(ld>3000){
Toast.makeText(getApplicationContext(),“是”,Toast.LENGTH\u SHORT.show();
lastDuration=0;
}
如果(ld<1000){
lastDuration=0;
Toast.makeText(getApplicationContext(),“NO”,Toast.LENGTH\u SHORT.show();
}
}
});
我遇到的主要问题是:当我第一次触摸到正确的imageView时,它不会进入onTouch,只会进入onClick。 你们知道有什么更好的办法来实施这个吗

非常感谢你

  • ACTION\u DOWN
    事件中返回true
    以获得
    ACTION\u UP
    事件的通知
  • 处理
    操作\u取消
    事件,并将其视为
    操作\u向上
  • 您可以计算
    ACTION\u DOWN
    ACTION\u UP
    之间的时间间隔,并忽略超过
    x
    秒的触摸

  • 谢谢,我需要onClick侦听器,因为如果用户单击另一个按钮/Imageview,消息/操作就会完成。所以我需要我的应用程序来侦听这些单击,但是当用户单击与我给出的标签相同的Imageview时,我希望这个Imageview侦听它关闭的时间。这很好。你做得对。返回即可在onTouch中为true,并遵循上面的其他2点。尝试使用
    onLongClickListener