1

我想在ListView用户触摸项目时为项目设置动画,并在触摸结束时向后执行动画。

我已经尝试通过覆盖onTouchEvent列表项来做到这一点,但是如果我在处理事件时返回 true,我将不再收到OnItemClickListener调用,因为我已经消耗了触摸事件,如果我返回 false,我不会收到回调用户停止触摸视图。

    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            //handle onclick
        }
    });

@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.v(TAG, event.getActionMasked() + "");
    if(event.getActionMasked() == MotionEvent.ACTION_DOWN) {
        Animation animation = createColorAnimation(false);
        animation.setDuration(500);
        startAnimation(animation);
        return true;
    } else if(event.getActionMasked() == MotionEvent.ACTION_UP || event.getActionMasked() == MotionEvent.ACTION_CANCEL) {
        Animation animation = createColorAnimation(true);
        animation.setDuration(500);
        startAnimation(animation);
        return true;
    }
    return super.onTouchEvent(event);
}

我想接收事件ACTION_UP和电话,我该如何实现?ACTION_CANCELonTouchEventOnItemClickListener

4

1 回答 1

2

在返回 View v 调用 v.setBackgroundDrawable 和自定义 Drawable 之前,在方法 getView() 中的列表适配器中。这个 Drawable 必须是有状态的(isStatefull 应该返回 true),覆盖 onStateChanged 并记录 StateSet.dump(stateSet),剩下的取决于你对每个状态做什么

于 2013-06-08T13:31:32.110 回答