package de.tudarmstadt.informatik.hostage.ui2.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.ViewSwitcher; import java.util.List; import de.tudarmstadt.informatik.hostage.R; import de.tudarmstadt.informatik.hostage.ui2.model.ProfileListItem; /** * @author Alexander Brakowski * @created 14.01.14 18:00 */ public class ProfileManagerListAdapter extends ArrayAdapter { private class ViewHolder { public TextView labelView; public TextView textView; public ImageView imageSelected; public ImageView itemIcon; public ImageButton buttonEdit; public ImageButton buttonDelete; public ViewSwitcher switcher; public ImageView itemIconBack; public TextView labelViewBack; } private final Context context; private final List values; private float mLastX, upX; private static final int MIN_DISTANCE = 50; private Animation inAnimation; public ProfileManagerListAdapter(Context context, List objects) { super(context, R.layout.profile_manager_list_item, objects); this.context = context; this.values = objects; inAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.in_right_to_left); } @Override public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = convertView; ViewHolder holder = null; final ProfileListItem item = values.get(position); if(rowView == null){ rowView = inflater.inflate(R.layout.profile_manager_list_item, parent, false); holder = new ViewHolder(); holder.labelView = (TextView) rowView.findViewById(R.id.profile_manager_item_label); holder.textView = (TextView) rowView.findViewById(R.id.profile_manager_item_text); holder.imageSelected = (ImageView) rowView.findViewById(R.id.profile_manager_item_activated); holder.itemIcon = (ImageView) rowView.findViewById(R.id.profile_manager_item_image); holder.buttonEdit = (ImageButton) rowView.findViewById(R.id.profile_manager_item_button_edit); holder.buttonDelete = (ImageButton) rowView.findViewById(R.id.profile_manager_item_button_delete); holder.switcher = (ViewSwitcher) rowView.findViewById(R.id.profile_manager_viewswitcher); holder.itemIconBack = (ImageView) rowView.findViewById(R.id.profile_manager_item_image_back); holder.labelViewBack = (TextView) rowView.findViewById(R.id.profile_manager_item_label_back); rowView.setTag(holder); } else { holder = (ViewHolder) rowView.getTag(); } holder.switcher.setOnTouchListener(new View.OnTouchListener(){ public boolean onTouch(View v, MotionEvent event) { float currentX = event.getX(); ViewHolder holder = (ViewHolder) v.getTag(); System.out.println("_______________ MOTION! " + event.toString()); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: mLastX = currentX; return true; case MotionEvent.ACTION_MOVE: return true; case MotionEvent.ACTION_UP: upX = event.getX(); float deltaX = mLastX - upX; // horizontal swipe detection if (Math.abs(deltaX) > MIN_DISTANCE) { if (deltaX < 0) { // swipe left to right if(item.isBackVisible){ holder.switcher.setDisplayedChild(0); item.isBackVisible = false; } return true; } if (deltaX > 0) { // swipe right to left if(!item.isBackVisible){ holder.switcher.setDisplayedChild(1); item.isBackVisible = true; } return true; } } break; } return false; } }); holder.buttonEdit.setFocusable(false); holder.buttonDelete.setFocusable(false); holder.buttonEdit.setFocusableInTouchMode(false); holder.buttonDelete.setFocusableInTouchMode(false); holder.textView.setText(item.label); holder.labelView.setText(item.text); holder.labelViewBack.setText(item.text); holder.itemIconBack.setImageBitmap(item.icon); holder.itemIcon.setImageBitmap(item.icon); holder.switcher.setInAnimation(null); if(item.isBackVisible){ holder.switcher.setDisplayedChild(1); } else { holder.switcher.setDisplayedChild(0); } holder.switcher.setInAnimation(inAnimation); if(!item.activated){ RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams )holder.textView.getLayoutParams(); lp.setMargins(0,0,0,0); holder.textView.setLayoutParams(lp); holder.imageSelected.setVisibility(View.GONE); } return rowView; } }