use of android.support.v7.widget.helper.ItemTouchHelper in project mosby by sockeqwe.
the class ShoppingCartOverviewFragment method setUpItemTouchHelper.
private void setUpItemTouchHelper() {
//
// Borrowed from https://github.com/nemanja-kovacevic/recycler-view-swipe-to-delete/blob/master/app/src/main/java/net/nemanjakovacevic/recyclerviewswipetodelete/MainActivity.java
//
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
// we want to cache these and not allocate anything repeatedly in the onChildDraw method
Drawable background;
Drawable xMark;
int xMarkMargin;
boolean initiated;
private void init() {
background = new ColorDrawable(ContextCompat.getColor(getActivity(), R.color.delete_background));
xMark = ContextCompat.getDrawable(getActivity(), R.drawable.ic_remove);
xMarkMargin = (int) getActivity().getResources().getDimension(R.dimen.ic_clear_margin);
initiated = true;
}
// not important, we don't want drag & drop
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
int swipedPosition = viewHolder.getAdapterPosition();
Product productAt = adapter.getProductAt(swipedPosition);
removeRelay.onNext(productAt);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
View itemView = viewHolder.itemView;
// not sure why, but this method get's called for viewholder that are already swiped away
if (viewHolder.getAdapterPosition() == -1) {
// not interested in those
return;
}
if (!initiated) {
init();
}
// draw red background
background.setBounds(itemView.getRight() + (int) dX, itemView.getTop(), itemView.getRight(), itemView.getBottom());
background.draw(c);
// draw x mark
int itemHeight = itemView.getBottom() - itemView.getTop();
int intrinsicWidth = xMark.getIntrinsicWidth();
int intrinsicHeight = xMark.getIntrinsicWidth();
int xMarkLeft = itemView.getRight() - xMarkMargin - intrinsicWidth;
int xMarkRight = itemView.getRight() - xMarkMargin;
int xMarkTop = itemView.getTop() + (itemHeight - intrinsicHeight) / 2;
int xMarkBottom = xMarkTop + intrinsicHeight;
xMark.setBounds(xMarkLeft, xMarkTop, xMarkRight, xMarkBottom);
// xMark.draw(c);
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
};
ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
mItemTouchHelper.attachToRecyclerView(recyclerView);
}
use of android.support.v7.widget.helper.ItemTouchHelper in project android_packages_apps_Settings by LineageOS.
the class ConditionAdapter method addDismissHandling.
public void addDismissHandling(final RecyclerView recyclerView) {
final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mSwipeCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
use of android.support.v7.widget.helper.ItemTouchHelper in project CustomViews by AndroidStudy233.
the class RecyclerViewActivity method fillContentView.
private void fillContentView() {
View view = View.inflate(this, R.layout.layout_recycler_main, null);
// 初始化SwipeRefreshLayout
swipe_main = (SwipeRefreshLayout) view.findViewById(R.id.swipe_recycler_main);
swipe_main.setColorSchemeResources(R.color.swipe_schema_red, swipe_schema_blue, R.color.swipe_schema_green);
swipe_main.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
MyApplication.getHandler().postDelayed(new Runnable() {
@Override
public void run() {
showToast("刷新成功~");
swipe_main.setRefreshing(false);
}
}, 1500);
}
});
// 初始化RecyclerView
recycler_main = (RecyclerView) view.findViewById(R.id.recycler_recycler_main);
// 设置布局管理者,采用线性布局管理者,竖直排列,不用反转(反转就是数据反序)
recycler_main.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
adapter = new SimpleRecyclerAdapter(this, new SimpleRecyclerAdapter.OnItemClickListener() {
@Override
public void onClick(int position, ImgAndText bean) {
/*
这里有个要注意的地方就是,在adapter中设置侦听的时候你要是用onBindViewHolder方法中的参数position
那么remove之后会position错乱BUG.这是RecyclerView的一个大坑...要用holder.getAdapterPosition传递
*/
System.arraycopy(hits, 1, hits, 0, hits.length - 1);
hits[hits.length - 1] = SystemClock.uptimeMillis();
if (hits[0] >= SystemClock.uptimeMillis() - 500) {
MyLogUtil.debug("position: " + position);
adapter.removeItem(position);
} else {
ToastUtil.toastShort(RecyclerViewActivity.this, "点击了图片");
}
}
});
// 设置拖拽监听, 首先定义一个callback定义拖拽功能, callback中定义listener与adapter传递事件
// 然后将callback传给helper, 并由helper绑定recycle
ItemTouchHelper.Callback callback = new OnRecyclerItemTouchCallBack(adapter);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(recycler_main);
/*
细节注意, 上述方式是通过长按条目来实现拖拽, 比如条目右边有个图标, 希望按住图标实现拖拽呢?
adapter的holder中设置图标触摸事件setOnTouchListener. 这就需要在onTouch方法中调用上面helper的
onStartDrag方法, 怎么调用呢? adapter定义一个接口OnIconDragHandler. 里边定义
onHandleDrag(RecyclerView.ViewHolder viewHolder); 然后通过构造传进来.
这样再让当前activity实现接口, 调用helper的onStartDrag方法. 然后new adapter的时候传过去.
最后具体一下图标的ouTouch方法
如果按下
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN){
回调RecyclerViewActivity中的onHandleDrag方法
让mItemTouchHelper执行拖拽操作
handler.startDrag(holder);
}
*/
// recycler_main.setAdapter(adapter);
// 使用第三方库中简单的动画来设置适配器,其对象可以setDuration、setInterpolator,甚至可以继续传入形成装饰者
// recycler_main.setAdapter(new ScaleInAnimationAdapter(adapter));
recycler_main.setAdapter(new SlideInLeftAnimationAdapter(adapter));
/*
这里有个非常重要的问题,如果你想使用增删动画,那么在增删操作的时候
你就不能使用notifyDataSetChanged,不然动画不会执行的,需要使用notifyItemRemoved(posi)、notifyItemInserted(posi)
*/
// 设置条目动画,增删的时候会用到
SlideInLeftAnimator animator = new SlideInLeftAnimator();
animator.setInterpolator(new OvershootInterpolator());
recycler_main.setItemAnimator(animator);
// 将填充好的View放到主页面上
frame_main.addView(view);
}
use of android.support.v7.widget.helper.ItemTouchHelper in project StreetComplete by westnordost.
the class QuestSelectionAdapter method onAttachedToRecyclerView.
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
ItemTouchHelper ith = new ItemTouchHelper(new TouchHelperCallback());
ith.attachToRecyclerView(recyclerView);
}
use of android.support.v7.widget.helper.ItemTouchHelper in project Shuttle by timusus.
the class QueueFragment method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_queue, container, false);
unbinder = ButterKnife.bind(this, rootView);
toolbar.setNavigationOnClickListener(v -> getActivity().onBackPressed());
toolbar.inflateMenu(R.menu.menu_queue);
SubMenu sub = toolbar.getMenu().addSubMenu(0, MusicUtils.Defs.ADD_TO_PLAYLIST, 1, R.string.save_as_playlist);
disposables.add(PlaylistUtils.createUpdatingPlaylistMenu(sub).subscribe());
toolbar.setOnMenuItemClickListener(toolbarListener);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setRecyclerListener(new RecyclerListener());
recyclerView.setAdapter(adapter);
itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback((fromPosition, toPosition) -> adapter.moveItem(fromPosition, toPosition), MusicUtils::moveQueueItem, () -> {
// Nothing to do
}));
itemTouchHelper.attachToRecyclerView(recyclerView);
disposables.add(Aesthetic.get(getContext()).colorPrimary().subscribe(color -> {
boolean isLight = Util.isColorLight(color);
lineOne.setTextColor(isLight ? Color.BLACK : Color.WHITE);
lineTwo.setTextColor(isLight ? Color.BLACK : Color.WHITE);
}));
// In landscape, we need to adjust the status bar's translation depending on the slide offset of the sheet
if (ShuttleUtils.isLandscape()) {
statusBarView.setTranslationY(ResourceUtils.toPixels(16));
disposables.add(multiSheetSlideEventRelay.getEvents().filter(multiSheetEvent -> multiSheetEvent.sheet == MultiSheetView.Sheet.SECOND).filter(multiSheetEvent -> multiSheetEvent.slideOffset >= 0).subscribe(multiSheetEvent -> {
statusBarView.setTranslationY((1 - multiSheetEvent.slideOffset) * ResourceUtils.toPixels(16));
}));
}
setupContextualToolbar();
queuePresenter = new QueuePresenter(requestManager, cabHelper);
return rootView;
}
Aggregations