onTouch和onClick

时间:2016-04-05 12:54:21

标签: javascript android

我试图制作一个应用程序,这件事让我大脑破碎了。用户必须选择我拥有的12个ImageView中的一个。如果它是正确的但用户只触摸它少于3秒,则显示正常消息。但如果他/她触摸超过3秒钟,则会触发新的不同消息。

问题是我有一个onClickListener来获取用户点击的ImageView的TAG,并将其与正确的比较。如果它是正确的,它还要做下一个工作: 用户是否触摸过它超过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();
                    }
                }

                });

我遇到的主要问题是:当我第一次触摸到正确的图像时,它不会进入onTouch,只能在onClick中进入。 你们知道实现这个更好的主意吗?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

    return true事件中
  1. ACTION_DOWN,以获得ACTION_UP事件
  2. 的通知
  3. 处理ACTION_CANCEL事件并将其视为ACTION_UP
  4. 您可以计算ACTION_DOWNACTION_UP之间的时间间隔,并忽略超过x秒的触摸。