Search in sources :

Example 86 with ItemTouchHelper

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);
}
Also used : ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) ColorDrawable(android.graphics.drawable.ColorDrawable) Canvas(android.graphics.Canvas) ColorDrawable(android.graphics.drawable.ColorDrawable) Drawable(android.graphics.drawable.Drawable) Product(com.hannesdorfmann.mosby3.sample.mvi.businesslogic.model.Product) RecyclerView(android.support.v7.widget.RecyclerView) BindView(butterknife.BindView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView)

Example 87 with ItemTouchHelper

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);
}
Also used : ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper)

Example 88 with ItemTouchHelper

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);
}
Also used : ImgAndText(com.shiqkuangsan.mycustomviews.bean.ImgAndText) OvershootInterpolator(android.view.animation.OvershootInterpolator) SlideInLeftAnimationAdapter(jp.wasabeef.recyclerview.adapters.SlideInLeftAnimationAdapter) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) View(android.view.View) ContentView(org.xutils.view.annotation.ContentView) RecyclerView(android.support.v7.widget.RecyclerView) SwipeRefreshLayout(android.support.v4.widget.SwipeRefreshLayout) SimpleRecyclerAdapter(com.shiqkuangsan.mycustomviews.adapter.SimpleRecyclerAdapter) ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) OnRecyclerItemTouchCallBack(com.shiqkuangsan.mycustomviews.ui.custom.OnRecyclerItemTouchCallBack) SlideInLeftAnimator(jp.wasabeef.recyclerview.animators.SlideInLeftAnimator)

Example 89 with ItemTouchHelper

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);
}
Also used : ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper)

Example 90 with ItemTouchHelper

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;
}
Also used : ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) R(com.simplecity.amp_library.R) CompletionListUpdateCallbackAdapter(com.simplecityapps.recycler_adapter.adapter.CompletionListUpdateCallbackAdapter) Bundle(android.os.Bundle) SongView(com.simplecity.amp_library.ui.modelviews.SongView) PlaylistUtils(com.simplecity.amp_library.utils.PlaylistUtils) ViewModel(com.simplecityapps.recycler_adapter.model.ViewModel) BindView(butterknife.BindView) Song(com.simplecity.amp_library.model.Song) Aesthetic(com.afollestad.aesthetic.Aesthetic) RequestManager(com.bumptech.glide.RequestManager) ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) MenuUtils(com.simplecity.amp_library.utils.MenuUtils) View(android.view.View) ResourceUtils(com.simplecity.amp_library.utils.ResourceUtils) Unbinder(butterknife.Unbinder) ItemTouchHelperCallback(com.simplecity.amp_library.ui.recyclerview.ItemTouchHelperCallback) ContextualToolbarHelper(com.simplecity.amp_library.utils.ContextualToolbarHelper) QueueView(com.simplecity.amp_library.ui.views.QueueView) SubMenu(android.view.SubMenu) ViewGroup(android.view.ViewGroup) MusicUtils(com.simplecity.amp_library.utils.MusicUtils) List(java.util.List) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) Disposable(io.reactivex.disposables.Disposable) TextView(android.widget.TextView) FragmentModule(com.simplecity.amp_library.dagger.module.FragmentModule) PermissionUtils(com.simplecity.amp_library.utils.PermissionUtils) Util(com.afollestad.aesthetic.Util) PlayerViewAdapter(com.simplecity.amp_library.ui.views.PlayerViewAdapter) Nullable(android.support.annotation.Nullable) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) ContextualToolbar(com.simplecity.amp_library.ui.views.ContextualToolbar) RecyclerListener(com.simplecityapps.recycler_adapter.recyclerview.RecyclerListener) ButterKnife(butterknife.ButterKnife) ViewModelAdapter(com.simplecityapps.recycler_adapter.adapter.ViewModelAdapter) SelectableViewModel(com.simplecity.amp_library.ui.modelviews.SelectableViewModel) Single(io.reactivex.Single) MenuItem(android.view.MenuItem) Inject(javax.inject.Inject) Toast(android.widget.Toast) UpgradeDialog(com.simplecity.amp_library.ui.dialog.UpgradeDialog) DeleteDialog(com.simplecity.amp_library.ui.dialog.DeleteDialog) ShuttleUtils(com.simplecity.amp_library.utils.ShuttleUtils) FastScrollRecyclerView(com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView) TaggerDialog(com.simplecity.amp_library.tagger.TaggerDialog) MultiSheetView(com.simplecity.multisheetview.ui.view.MultiSheetView) LayoutInflater(android.view.LayoutInflater) ThemedStatusBarView(com.simplecity.amp_library.ui.views.ThemedStatusBarView) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) Color(android.graphics.Color) ShuttleApplication(com.simplecity.amp_library.ShuttleApplication) MultiSheetSlideEventRelay(com.simplecity.amp_library.ui.views.multisheet.MultiSheetSlideEventRelay) Toolbar(android.support.v7.widget.Toolbar) PlayerPresenter(com.simplecity.amp_library.ui.presenters.PlayerPresenter) QueuePresenter(com.simplecity.amp_library.ui.presenters.QueuePresenter) Callback(com.simplecity.amp_library.utils.ContextualToolbarHelper.Callback) QueuePresenter(com.simplecity.amp_library.ui.presenters.QueuePresenter) RecyclerListener(com.simplecityapps.recycler_adapter.recyclerview.RecyclerListener) SubMenu(android.view.SubMenu) MusicUtils(com.simplecity.amp_library.utils.MusicUtils) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) SongView(com.simplecity.amp_library.ui.modelviews.SongView) BindView(butterknife.BindView) View(android.view.View) QueueView(com.simplecity.amp_library.ui.views.QueueView) TextView(android.widget.TextView) FastScrollRecyclerView(com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView) MultiSheetView(com.simplecity.multisheetview.ui.view.MultiSheetView) ThemedStatusBarView(com.simplecity.amp_library.ui.views.ThemedStatusBarView) ItemTouchHelperCallback(com.simplecity.amp_library.ui.recyclerview.ItemTouchHelperCallback)

Aggregations

ItemTouchHelper (android.support.v7.widget.helper.ItemTouchHelper)124 RecyclerView (android.support.v7.widget.RecyclerView)93 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)84 View (android.view.View)67 TextView (android.widget.TextView)25 ImageView (android.widget.ImageView)24 ViewGroup (android.view.ViewGroup)20 Toolbar (android.support.v7.widget.Toolbar)16 LayoutInflater (android.view.LayoutInflater)14 SearchView (android.support.v7.widget.SearchView)12 Intent (android.content.Intent)11 DefaultItemAnimator (android.support.v7.widget.DefaultItemAnimator)11 DialogInterface (android.content.DialogInterface)10 Canvas (android.graphics.Canvas)9 Bundle (android.os.Bundle)9 BindView (butterknife.BindView)9 Nullable (android.support.annotation.Nullable)8 FloatingActionButton (android.support.design.widget.FloatingActionButton)8 ArrayList (java.util.ArrayList)8 Context (android.content.Context)7