如何通过onTouchListener区分ACTION_UP和实际点击?

时间:2016-04-29 12:20:01

标签: android ontouchlistener

我有一个带有图标的ImageView。我希望能够:

1 即可。更改悬停时的图标(意思是 - 更改为 ACTION_DOWN 上的图标#2,但也会将其更改回 ACTION_UP 上的图标#1) 的 2 即可。触发onClick函数(意思是 - 当ImageView 点击时调用另一个函数)

这就是我onTouch现在的样子:

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

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // CHANGE TO IMAGE #2
            break;

        case MotionEvent.ACTION_UP:
            // CHANGE TO IMAGE #1
            break;
    }

    return true;
}

问题是 - 我无法知道用户何时按下ImageView,然后在按下的同时离开其区域。我希望我能很好地解释它。我的意思是 ACTION_UP 并不总是暗示用户打算点击视图。如何ImageView 点击并且不仅仅是悬停(并且仍然可以在悬停时更改图标),我怎么知道?

2 个答案:

答案 0 :(得分:1)

如果您使用选择器会更好。您可以阅读有关StateList的更多信息。互联网上有很多例子如何使用。

答案 1 :(得分:1)

使用Selector Drawable类似的东西。

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

    <!-- default -->
    <item android:drawable="@drawable/btn_bg" android:state_focused="false" android:state_pressed="false" />

    <!-- button focused -->
    <item android:drawable="@drawable/btn_bg_focus_new" android:state_focused="true" android:state_pressed="false" />

    <!-- button pressed -->
    <item android:drawable="@drawable/btn_bg_focus_new" android:state_focused="false" android:state_pressed="true" />
</selector>