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
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.