【问题标题】:How to detect if click event is finished in android?如何检测点击事件是否在android中完成?
【发布时间】:2023-03-29 09:29:01
【问题描述】:

我动态创建视图,并正常处理它们的点击事件,如下所示:

myView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                v.setBackgroundColor(0xaaffffff);


            }
        });

但是这段代码不处理onRelease事件,所以点击后视图保持白色背景。

那么如何在点击状态结束时将背景设置为另一个值?

提前致谢!

编辑:

OnTouchListener 做同样的事情。我想我需要onReleaseListener 之类的东西?

【问题讨论】:

  • 你需要设置 onTouchListener() 来代替
  • 或者你用xml定义你的drawable
  • @A.S.是的,这是个好主意。但我也想学编程。

标签: android event-handling touch onclicklistener android-event


【解决方案1】:

为此,您需要使用onTouchListener => documentation

请参阅此tutorial,了解如何使用它。

例子:

myView.setOnTouchListener(
        new View.OnTouchListener() {
        public boolean onTouch(View myView, MotionEvent event) {
            int action = event.getAction();
            if (action==MotionEvent.ACTION_MOVE)
            {
                myView.setBackgroundColor(Color.BLUE);
            }
            if (action==MotionEvent.ACTION_UP)
            {
                myView.setBackgroundColor(Color.RED);
            }
            if (action==MotionEvent.ACTION_DOWN)
            {
                myView.setBackgroundColor(Color.YELLOW);
            }
            // TODO Auto-generated method stub
            return true;
        }
    }    

【讨论】:

  • 哦,简单又漂亮。谢谢 :) 我会接受这个。但是关于如何使用转换来做到这一点的任何想法?
  • 还有一个小问题,在 DOWN + MOVE 之后 ACTION_UP 不会触发。有什么解决方法吗?
  • @mobilGelistirici 尝试在 onTouch 函数中返回 true 而不是 false。请参阅编辑后的答案。返回true 表示您正在消费该事件,因此您将获得后续事件。
  • 仍然没有成功。我问了一个不同的问题。 stackoverflow.com/questions/19932482/… 现在接受你的回答。感谢您的帮助!
  • 好的,谢谢。祝你好运。我建议您在使用该事件时返回 true...您离正确的做法不远了
【解决方案2】:

Android 为此提供了一个选择器。在可绘制文件夹中的 xml 文件中定义它并将其用作背景:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false" android:drawable="@drawable/YOURDRAWABLE" />           

    <item android:state_pressed="true" android:drawable="@drawable/YOURDRAWABLE_WHEN_CLICKED" />          

</selector>

查看DOCUMENTATION

【讨论】:

  • 感谢您的帮助。我会支持你。但正如我所说,这不是我的答案。
  • 好的,然后将 onTouchListener 与不同的事件一起使用。谢谢!
【解决方案3】:

状态列表旨在用于状态更改的样式更新。看一下这个。 http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

【讨论】:

    【解决方案4】:

    您不需要采用这种复杂的方法来捕获“点击”事件。仅针对此方法:-

    //当然是在触摸监听器里面:-

    科特林:-

        if(event.action == MotionEvent.ACTION_UP && event.action != MotionEvent.ACTION_MOVE) {
    // Click has been made...
    // Some code
    }
    

    JAVA :- 只需将 event.action 替换为 event.getAction()

    这对我有用?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-23
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多