从手势监听器onSingleTapConfirmed发送触摸事件并保持选择器效果

时间:2013-04-23 10:04:16

标签: android android-layout android-listview android-event

我有一个包含多个按钮的项目的列表视图。一个项目的布局如下所示:

The black frame represents one listview item

我有一个覆盖透明视图,覆盖每个整个列表项。此视图会侦听两个手势:onDoubleTaponSingleTapConfimred

要触发底层按钮上的点击侦听器,我可以从覆盖的触摸侦听器调度触摸事件,但显示按钮上的选择器和状态(例如更改的背景颜色)在新闻中)。当覆盖视图触发onSingleTapConfimred

时,我也只想要触发点击事件
...
final DtGestureDetector detector = new DtGestureDetector(position);
final GestureDetector gd = new GestureDetector(convertView.getContext(), detector);
postViewHolder.viewOverlay.setOnTouchListener(new OnTouchListener() {           
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //i want to trigger this only onSingleTapConfirmed and set the view selector on touch
        //postViewHolder.txtMessage.onTouchEvent(event); 
        //postViewHolder.layPhoto.onTouchEvent(event);
        gd.onTouchEvent(event);                     
        return true;
    }
});
...
private class DtGestureDetector extends GestureDetector.SimpleOnGestureListener {

    private int position;   

    public DtGestureDetector(int position) {
        super();
        this.position = position;
    }

    public boolean onDoubleTap(MotionEvent e) {
        Log.d(tag, "DoubleTap"+position);
        return true;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Log.d(tag, "SingleTap"+position);
            return true;
    }
}

1 个答案:

答案 0 :(得分:0)

我可以通过以编程方式设置状态来解决这个问题

int[] state = new int[] {android.R.attr.state_window_focused, android.R.attr.state_focused};
drawable.setState(state);