package com.d.xrv.adapter; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; import android.support.v4.content.ContextCompat; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.d.lib.xrv.adapter.CommonAdapter; import com.d.lib.xrv.adapter.CommonHolder; import com.d.lib.xrv.itemtouchhelper.ItemTouchHelperViewHolder; import com.d.xrv.R; import com.d.xrv.model.Bean; import java.util.Collections; import java.util.List; /** * ItemTouchAdapter * Created by D on 2017/6/3. */ public class ItemTouchAdapter extends CommonAdapter<Bean> { private int colorSelected; private boolean isLinear = true; public ItemTouchAdapter(Context context, List<Bean> datas, int layoutId) { super(context, datas, layoutId); colorSelected = Color.parseColor("#33333333"); } public void toggle(boolean isLinear) { this.isLinear = isLinear; notifyDataSetChanged(); } @Override public void convert(int position, final CommonHolder holder, Bean item) { if (isLinear) { holder.setViewVisibility(R.id.llyt_style0, View.VISIBLE); holder.setViewVisibility(R.id.v_style0, View.VISIBLE); holder.setViewVisibility(R.id.tv_style1, View.GONE); linearConvert(holder, item); } else { holder.setViewVisibility(R.id.llyt_style0, View.GONE); holder.setViewVisibility(R.id.v_style0, View.GONE); holder.setViewVisibility(R.id.tv_style1, View.VISIBLE); gridConvert(holder, item); } } @SuppressLint("ClickableViewAccessibility") private void gridConvert(final CommonHolder holder, Bean item) { final TextView tvHandler = holder.getView(R.id.tv_style1); tvHandler.setText(item.content); tvHandler.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN && getItemCount() > 1 && startDragListener != null) { // Step 9-5: 只有调用onStartDrag才会触发拖拽 (这里在touch时开始拖拽,当然也可以单击或长按时才开始拖拽) startDragListener.onStartDrag(holder); return true; } return false; } }); // Step 9-7: 设置ItemTouchListener holder.setOnItemTouchListener(new ItemTouchHelperViewHolder() { @Override public void onItemSelected() { // 触发拖拽时回调 tvHandler.setBackgroundDrawable(ContextCompat.getDrawable(mContext, R.drawable.corner_bg_touch_select)); } @Override public void onItemClear() { // 手指松开时回调 tvHandler.setBackgroundDrawable(ContextCompat.getDrawable(mContext, R.drawable.corner_bg_touch_normal)); } }); } @SuppressLint("ClickableViewAccessibility") private void linearConvert(final CommonHolder holder, Bean item) { holder.setText(R.id.tv_style0, item.content); ImageView ivHandler = holder.getView(R.id.iv_style0_handler); ivHandler.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN && getItemCount() > 1 && startDragListener != null) { // Step 9-5: 只有调用onStartDrag才会触发拖拽 (这里在touch时开始拖拽,当然也可以单击或长按时才开始拖拽) startDragListener.onStartDrag(holder); return true; } return false; } }); // Step 9-7: 设置ItemTouchListener holder.setOnItemTouchListener(new ItemTouchHelperViewHolder() { @Override public void onItemSelected() { // 触发拖拽时回调 holder.itemView.setBackgroundColor(colorSelected); } @Override public void onItemClear() { // 手指松开时回调 holder.itemView.setBackgroundColor(0); } }); } @Override public void onItemDismiss(int position) { // Step 9-8: 回调, Item被删除 mDatas.remove(position); notifyItemRemoved(position); } @Override public boolean onItemMove(int fromPosition, int toPosition) { // Step 9-9: 回调, 两个Item之间交换位置 if (Math.abs(fromPosition - toPosition) > 1) { Bean from = mDatas.get(fromPosition); mDatas.remove(fromPosition); mDatas.add(toPosition, from); } else { Collections.swap(mDatas, fromPosition, toPosition); } notifyItemMoved(fromPosition, toPosition); return true; } }