Android ListView Swipe Right and Left to Accept and Reject

前端 未结 6 1174
遥遥无期
遥遥无期 2020-12-05 11:37

I want to develop a list view that when swiped left to right - displays in the left corner an accept (true) icon (non clickable - show just a color change when swiping left

6条回答
  •  星月不相逢
    2020-12-05 12:07

    Using an answer at https://stackoverflow.com/a/31094315/2914140 I made it so.

    View.OnTouchListener swipeListener = new View.OnTouchListener() {
        private float dx;
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    dx = v.getX() - event.getRawX();
                    break;
                case MotionEvent.ACTION_MOVE:
                    // You can limit x-coordinate.
                    float x = Math.min(event.getRawX() + dx, 0);
                    // x = Math.max(x, ((View) v.getParent()).getWidth() - v.getWidth()); // Scroll if layout is wider than screen.
                    v.animate()
                            .x(x)
                            .setDuration(0)
                            .start();
                    break;
                default:
                    return false;
            }
            return true;
        }
    };
    

    In getView of your adapter write:

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_layout, false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
    
        // Fill data.
        final Item item = items.get(position);
        viewHolder.caption.setText(item.getCaption());
        // Set onTouch listener.
        convertView.setOnTouchListener(swipeListener);
        return convertView;
    }
    

    I think the same can be achieved by using HorizontalScrollView inside item_layout.xml.

提交回复
热议问题