日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android之RecycleView實(shí)現(xiàn)指定范圍的拖動(dòng)效果

瀏覽:170日期:2022-09-23 13:34:45

1 問(wèn)題

在RecycleView里面實(shí)現(xiàn)指定位置的拖動(dòng)效果,(這里是實(shí)現(xiàn)線(xiàn)性布局的,不是網(wǎng)格布局的)

@Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { Log.i(TAG, 'onMove viewHolder.getAdapterPosition() is:' + viewHolder.getAdapterPosition()); int itemViewType = viewHolder.getAdapterPosition(); Log.i(TAG, 'onMove---------------------------------itemViewType is:' + itemViewType);// if (itemViewType == 0 || itemViewType == 1 || itemViewType == 16) {// Log.i(TAG, 'onMove---------------------------------itemViewType is:' + itemViewType);// return false;// } int fromPosition = viewHolder.getAdapterPosition();//得到拖動(dòng)ViewHolder的position int toPosition = target.getAdapterPosition();//得到目標(biāo)ViewHolder的position Log.i(TAG, 'onMove---------------------------------fromPosition is:' + fromPosition); Log.i(TAG, 'onMove---------------------------------toPosition is:' + toPosition);//這里的position如果不是指定范圍內(nèi)的話(huà),直接返回false,就拖動(dòng)不到其它位置了 if (DragUtil.INSTANCE.getProhibitDragIndexs().contains(toPosition)) { return false; } itemTouchAdapter.onMove(fromPosition,toPosition); return true; }

2 關(guān)鍵代碼如下

MyItemTouchCallback.java

import android.graphics.Canvas;import android.graphics.Color;import android.graphics.drawable.Drawable;import android.util.Log; import androidx.recyclerview.widget.GridLayoutManager;import androidx.recyclerview.widget.ItemTouchHelper;import androidx.recyclerview.widget.RecyclerView; import com.appsinnova.android.keepdrop.manager.FileScanManager; /** * Created by Administrator on 2016/4/12. */public class MyItemTouchCallback extends ItemTouchHelper.Callback { public static final String TAG = MyItemTouchCallback.class.getSimpleName(); private ItemTouchAdapter itemTouchAdapter; public MyItemTouchCallback(ItemTouchAdapter itemTouchAdapter){ this.itemTouchAdapter = itemTouchAdapter; } @Override public boolean isLongPressDragEnabled() { return false; } @Override public boolean isItemViewSwipeEnabled() { return true; } @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { Log.i(TAG, 'getMovementFlags viewHolder.getAdapterPosition() is:' + viewHolder.getAdapterPosition()); int itemViewType = viewHolder.getAdapterPosition(); Log.i(TAG, '---------------------------------itemViewType is:' + itemViewType);// if (itemViewType == 0 || itemViewType == 1 || itemViewType == 16) {// Log.i(TAG, '-getMovementFlags--------------------------------itemViewType is:' + itemViewType);// return makeMovementFlags(0, 0);// } if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; final int swipeFlags = 0; return makeMovementFlags(dragFlags, swipeFlags); } else { final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; //final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; final int swipeFlags = 0; Log.i(TAG, 'makeMovementFlags start'); return makeMovementFlags(dragFlags, swipeFlags); } } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { Log.i(TAG, 'onMove viewHolder.getAdapterPosition() is:' + viewHolder.getAdapterPosition()); int itemViewType = viewHolder.getAdapterPosition(); Log.i(TAG, 'onMove---------------------------------itemViewType is:' + itemViewType);// if (itemViewType == 0 || itemViewType == 1 || itemViewType == 16) {// Log.i(TAG, 'onMove---------------------------------itemViewType is:' + itemViewType);// return false;// } int fromPosition = viewHolder.getAdapterPosition();//得到拖動(dòng)ViewHolder的position int toPosition = target.getAdapterPosition();//得到目標(biāo)ViewHolder的position Log.i(TAG, 'onMove---------------------------------fromPosition is:' + fromPosition); Log.i(TAG, 'onMove---------------------------------toPosition is:' + toPosition);//這里的position如果不是指定范圍內(nèi)的話(huà),直接返回false,就拖動(dòng)不到其它位置了 if (DragUtil.INSTANCE.getProhibitDragIndexs().contains(toPosition)) { return false; } itemTouchAdapter.onMove(fromPosition,toPosition); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { int position = viewHolder.getAdapterPosition(); itemTouchAdapter.onSwiped(position); } @Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { //滑動(dòng)時(shí)改變Item的透明度 final float alpha = 1 - Math.abs(dX) / (float) viewHolder.itemView.getWidth(); viewHolder.itemView.setAlpha(alpha); viewHolder.itemView.setTranslationX(dX); } else { super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } } @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { if (background == null && bkcolor == -1) {Drawable drawable = viewHolder.itemView.getBackground();if (drawable == null) { bkcolor = 0;} else { background = drawable;} } viewHolder.itemView.setBackgroundColor(Color.LTGRAY); } super.onSelectedChanged(viewHolder, actionState); } @Override public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder); viewHolder.itemView.setAlpha(1.0f); if (background != null) viewHolder.itemView.setBackgroundDrawable(background); if (bkcolor != -1) viewHolder.itemView.setBackgroundColor(bkcolor); //viewHolder.itemView.setBackgroundColor(0); if (onDragListener!=null){ onDragListener.onFinishDrag(); } } private Drawable background = null; private int bkcolor = -1; private OnDragListener onDragListener; public MyItemTouchCallback setOnDragListener(OnDragListener onDragListener) { this.onDragListener = onDragListener; return this; } public interface OnDragListener{ void onFinishDrag(); } public interface ItemTouchAdapter { void onMove(int fromPosition, int toPosition); void onSwiped(int position); }}

OnRecyclerItemClickListener.java

import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View; import androidx.core.view.GestureDetectorCompat;import androidx.recyclerview.widget.RecyclerView; /** * Created by Administrator on 2016/4/14. */public class OnRecyclerItemClickListener implements RecyclerView.OnItemTouchListener { private GestureDetectorCompat mGestureDetector; private RecyclerView recyclerView; public OnRecyclerItemClickListener(RecyclerView recyclerView){ this.recyclerView = recyclerView; mGestureDetector = new GestureDetectorCompat(recyclerView.getContext(),new ItemTouchHelperGestureListener()); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetector.onTouchEvent(e); return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetector.onTouchEvent(e); } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onSingleTapUp(MotionEvent e) { View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (child!=null) {RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child);onItemClick(vh); } return true; } @Override public void onLongPress(MotionEvent e) { View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (child!=null) {RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child);onLongClick(vh); } } } public void onLongClick(RecyclerView.ViewHolder vh){} public void onItemClick(RecyclerView.ViewHolder vh){}}

適配器里面實(shí)現(xiàn)接口

MyItemTouchCallback.ItemTouchAdapter

import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.ImageView; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList;import java.util.Collections;import java.util.List; import static com.appsinnova.android.keepdrop.recommend.entity.ChannelHead.channelType; public class ChannelManagerAdapter extends BaseMultiItemQuickAdapter<MultiItemEntity, BaseViewHolder> implements MyItemTouchCallback.ItemTouchAdapter { public static final String TAG = ChannelManagerAdapter.class.getSimpleName(); public static final int MY_VEDIO_TYPE = 0; public static final int MORE_VEDIO_TYPE = 1; public static final int CAN_EDITABLE = 1; public static final int CAN_NOT_EDITABLE = 0; public List<MultiItemEntity> results = null; public ChannelManagerAdapter(List<MultiItemEntity> data) { super(data); addItemType(ChannelHead.channelHeadType, R.layout.item_channel_head); addItemType(channelType, R.layout.item_channel); this.results = data; } @Override protected void convert(BaseViewHolder helper, MultiItemEntity item) { switch (helper.getItemViewType()) { } } @Override public void onMove(int fromPosition, int toPosition) { if (fromPosition==results.size()-1 || toPosition==results.size()-1){ return; } if (fromPosition < toPosition) { for (int i = fromPosition; i < toPosition; i++) {Collections.swap(results, i, i + 1); } } else { for (int i = fromPosition; i > toPosition; i--) {Collections.swap(results, i, i - 1); } }//這個(gè)數(shù)據(jù)是移動(dòng)后的數(shù)據(jù),會(huì)更新原始數(shù)據(jù) int size = results.size(); List<RecommendVedioModel.RecommendVedioItem> items = new ArrayList<RecommendVedioModel.RecommendVedioItem>(); RecommendVedioModel recommendVedioModel = SPHelper.getInstance().getObject(SpConstants.RECOMMEND_VEDIO_CATETGORY, RecommendVedioModel.class); for (int i = 0; i < size; ++i) { if (results.get(i).getItemType() == channelType) {RecommendVedioModel.RecommendVedioItem item = (RecommendVedioModel.RecommendVedioItem)results.get(i);items.add(item); } } if (recommendVedioModel != null) { recommendVedioModel.items = items; } else { Log.i(TAG, 'recommendVedioModel is null'); } SPHelper.getInstance().putObject(SpConstants.RECOMMEND_VEDIO_CATETGORY, recommendVedioModel); notifyItemMoved(fromPosition, toPosition); } @Override public void onSwiped(int position) { }}

然后在頁(yè)面顯示的地方

channelManagerAdapter = ChannelManagerAdapter(allDatas) val layoutManager = LinearLayoutManager(this) layoutManager.orientation = LinearLayoutManager.VERTICAL channelRecycleview.setLayoutManager(layoutManager) channelRecycleview.setAdapter(channelManagerAdapter) val itemTouchHelper = ItemTouchHelper(MyItemTouchCallback(channelManagerAdapter)) itemTouchHelper.attachToRecyclerView(channelRecycleview) channelRecycleview.addOnItemTouchListener(object : OnRecyclerItemClickListener(channelRecycleview) { override fun onLongClick(vh: RecyclerView.ViewHolder) {LogUtil.i(TAG, 'onLongClick vh.layoutPosition is:' + vh.layoutPosition)var index = vh.layoutPositionif (!prohibitDragIndexs.contains(index)) { itemTouchHelper.startDrag(vh)} } })

到此這篇關(guān)于A(yíng)ndroid之RecycleView實(shí)現(xiàn)指定范圍的拖動(dòng)效果的文章就介紹到這了,更多相關(guān)android recycleView實(shí)現(xiàn)指定范圍的拖動(dòng)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩三级一区| 黄色精品视频| 热久久久久久| 亚洲一区二区成人| 亚洲大全视频| 久久婷婷激情| 日韩一区二区三区在线免费观看| 91成人精品在线| 国产情侣久久| 麻豆高清免费国产一区| 久久亚洲国产精品尤物| 国产精品美女久久久久久不卡| 日韩av中文字幕一区二区三区| 日韩不卡一区二区| 麻豆成人综合网| 在线手机中文字幕| 亚洲国产成人精品女人| 美女网站久久| 日韩 欧美一区二区三区| 国产亚洲精品精品国产亚洲综合| 日韩国产欧美视频| 福利一区在线| 久久精品主播| 视频一区国产视频| 国产女人18毛片水真多18精品| 丰满少妇一区| 欧美日韩高清| 国产精品mv在线观看| 久久精品影视| 国产精品日本一区二区三区在线| 麻豆视频在线看| 在线观看一区| 91免费精品| 蜜桃免费网站一区二区三区| 国产精品久久久网站| 久久久9色精品国产一区二区三区| 欧美一区二区三区高清视频| 亚洲国产成人精品女人| 国产日本精品| 午夜久久美女| 中文在线免费视频| 欧美视频精品全部免费观看| 色爱av综合网| 免费亚洲婷婷| 首页国产欧美日韩丝袜| av在线资源| 国产精品麻豆成人av电影艾秋| 午夜欧美精品| 91欧美在线| 日韩精品一区二区三区av| 久久精品国产亚洲夜色av网站| 国产精品亚洲综合在线观看| 久久国产中文字幕| 国产麻豆一区二区三区精品视频| 狠狠干综合网| 91tv亚洲精品香蕉国产一区| 麻豆91小视频| 国产情侣久久| 国产日韩在线观看视频| 免费在线观看一区二区三区| 日韩精品网站| 电影亚洲精品噜噜在线观看| 国产一区二区三区免费在线| 国产极品一区| 久久99精品久久久野外观看| 国产精品一国产精品| 日韩国产在线观看一区| 在线综合欧美| 亚洲一区二区三区高清不卡| 日韩午夜一区| 免费毛片在线不卡| 捆绑调教日本一区二区三区| 狠狠久久伊人| 亚洲国产福利| 亚洲h色精品| 亚洲激情偷拍| 亚洲主播在线| 国产香蕉精品| 精品欧美视频| 亚洲天堂黄色| 日本亚洲视频在线| 你懂的国产精品| 精品中文字幕一区二区三区 | 国产精品igao视频网网址不卡日韩| 国产精品v日韩精品v欧美精品网站| 国产精品日本一区二区不卡视频| 精品国产18久久久久久二百| 高清一区二区| 国产一区91| 日韩av一二三| 人人香蕉久久| 国产精品一区二区av日韩在线| 999国产精品永久免费视频app| 伊人影院久久| 免播放器亚洲一区| 久久国产视频网| 国产+成+人+亚洲欧洲在线| 亚洲精品网址| 老司机精品视频在线播放| 亚洲精品91| 国产66精品| 亚洲不卡视频| 久久久久久美女精品| 欧美一区二区三区久久| **爰片久久毛片| 国产视频一区欧美| 国产videos久久| 国产美女亚洲精品7777| 鲁大师成人一区二区三区| 欧美精品三级在线| 国产在线不卡| 喷白浆一区二区| 亚洲国产一区二区在线观看| 欧美aa国产视频| 亚洲一区二区小说| 麻豆国产精品| 日本午夜精品一区二区三区电影| 欧美日中文字幕| 91亚洲国产高清| 你懂的亚洲视频| 国产精品一级在线观看| 日韩精品国产欧美| 99日韩精品| 精品1区2区3区4区| 精品国产一区二| 国产精品美女午夜爽爽| 国产亚洲电影| 欧美91在线| 欧美国产美女| 私拍精品福利视频在线一区| 日本一区二区高清不卡| 欧美xxxx中国| 红桃视频国产精品| 韩国精品主播一区二区在线观看 | 久久国产高清| 成人亚洲精品| 久久中文视频| 久久大逼视频| 日本成人在线不卡视频| 97久久亚洲| 久久久久久亚洲精品美女| 麻豆精品99| 国产v综合v| 在线精品一区| 久久中文字幕一区二区| 日韩精品不卡一区二区| 欧美精选一区二区三区| 亚洲精品国产偷自在线观看| 91精品啪在线观看国产18| 天堂成人免费av电影一区| 喷白浆一区二区| 麻豆中文一区二区| 久久国产电影| 免费看精品久久片| 久久亚洲黄色| 久久亚洲二区| 国产一区二区久久久久| 99热精品久久| 久久狠狠久久| 亚洲精品小说| 国产劲爆久久| 中文字幕免费一区二区| 色网在线免费观看| 免费一区二区三区在线视频| 亚洲天堂一区二区| 久久国产人妖系列| 欧美日韩视频| 亚洲成人不卡| 美女在线视频一区| 色狠狠一区二区三区| 国产99精品| 精品国产成人| 91精品国产一区二区在线观看| 久久精品二区三区| 欧美aaaaaa午夜精品| 久久国产精品久久w女人spa| 超碰在线99| 婷婷久久免费视频| 国产a久久精品一区二区三区| 日韩有吗在线观看| 国产亚洲精品v| 欧美精品一卡| 五月天久久网站| 伊人久久高清| 日韩在线精品| 精品免费视频| 国内一区二区三区| 老色鬼精品视频在线观看播放| 亚洲日本免费电影| 99亚洲精品| 91九色精品| 亚洲最新无码中文字幕久久| 精品理论电影在线| 国产日韩欧美一区二区三区在线观看| 亚洲香蕉久久| 视频一区二区三区在线| 丝袜亚洲精品中文字幕一区| 尤物在线精品| 亚洲黄色在线| 亚洲国产一区二区三区在线播放|