首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onTouch和onClick

onTouch和onClick
EN

Stack Overflow用户
提问于 2016-04-05 12:54:21
回答 1查看 650关注 0票数 1

我正试着做一个应用程序,这个东西让我的大脑崩溃了。用户必须选择我拥有的12个ImageViews中的一个。如果这是正确的,但用户只能触摸它不到3秒,一条正常的消息显示。但是,如果他/她触摸它超过3秒,它会触发一个新的和不同的消息。

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

代码语言:javascript
复制
@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中输入。你们知道有什么更好的办法来实现这个吗?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-04-05 12:58:02

  1. return trueACTION_DOWN事件中得到ACTION_UP事件的通知
  2. 也要处理ACTION_CANCEL事件,并将其视为ACTION_UP
  3. 您可以计算ACTION_DOWNACTION_UP之间的时间间隔,忽略超过x秒的触摸。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36426956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档