0

我有一个自定义 ListView,我用 Adaptar 填充。在我的应用程序中,列表中的项目将根据它们的状态而变化,所以我正在更新我的 ImageViews,如下所示:

mStatusIcon = (ImageView) findViewById(R.id.imgStatusIcon);
mStatusIcon.setImageResource(R.drawable.icon_cancel);

到目前为止,一切都很好。问题是我想要在我的布局的某个部分有某种焦点/悬停状态。OnTouchListener()我已经在View mHitfield我的布局 xml 中设置了一个。

我可以捕捉到所有相关的动作:ACTION_MOVEACTION_DOWN和。ACTION_UPACTION_CANCEL

问题是当我改变我ImageView mStatusIcon的下一个动作时,我捕捉到的总是ACTION_CANCEL.

View mHitfield = (View) findViewById(R.id.outerShape);

mHitfield.setOnTouchListener(new OnTouchListener() 
{

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

        int currentAction = event.getAction();

        switch(currentAction)
        {
            case MotionEvent.ACTION_DOWN:   
            case MotionEvent.ACTION_MOVE:

                // if I comment out these lines I keep receiving all actions
                // if I don't, I only receive ACTION_DOWN followed by ACTION_CANCEL
                mStatusIcon.setImageResource(R.drawable.icon_download_normal);
                break;

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL: 

                // if I comment out these lines I keep receiving all actions
                // if I don't, I only receive ACTION_DOWN followed by ACTION_CANCEL
                mStatusIcon.setImageResource(R.drawable.icon_download_hover);
                break;
        }

        return false;
    }
});

有人可以向我解释为什么会发生这种情况以及是否有办法解决这个问题?

4

1 回答 1

0

我仍然不确定它为什么会发生,但似乎 TouchEvent 被取消了,因为在创建的自定义视图中更新了布局。一旦我没有使用自定义视图而是创建了一个 XML 布局,问题就不复存在了。

于 2012-08-20T16:03:56.447 回答