【问题标题】:onTouch and onClickonTouch 和 onClick
【发布时间】:2016-04-05 22:54:25
【问题描述】:

我正在尝试制作一个应用程序,而这件事让我大吃一惊。用户必须从我拥有的 12 个 ImageView 中选择 1 个。如果它是正确的,但用户仅触摸它不到 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();
                    }
                }

                });

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

非常感谢!

【问题讨论】:

  • 尝试使用onLongClickListener

标签: javascript android


【解决方案1】:
  1. return true 在ACTION_DOWN 事件中获得ACTION_UP 事件的通知
  2. 也处理ACTION_CANCEL 事件并将其视为ACTION_UP。
  3. 您可以计算ACTION_DOWN 和ACTION_UP 之间的时间间隔,并忽略超过x 秒的触摸。

【讨论】:

  • 谢谢,问题是我需要 onClick 侦听器,因为如果用户单击另一个按钮/Imageview,则会完成消息/操作。所以我需要我的应用程序来监听点击,但是当用户点击标签相同的 ImageView 时,我希望这个 ImageView 能够监听它已经关闭的时间。
  • 没关系。你做得对。只需在 onTouch 中返回 true 并按照上面的其他 2 点操作即可。
猜你喜欢
  • 1970-01-01
  • 2012-02-25
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多