【问题标题】:Swipe gesture material design滑动手势材料设计
【发布时间】:2019-03-11 00:11:50
【问题描述】:

我正在阅读Cards - Material design。我想在我的布局中实现滑动手势,但我遇到了一些问题。

This is the effect I want to get.

我当前使用 ItemTouchHelper 实现的问题是该项目总是从布局中完全删除,我不希望这种情况发生,就像在上面的视频中一样,我希望允许布局直接滑动到屏幕整个宽度的最大 30%,如果用户将其放在它之前,我希望它备份,以便布局回到其默认位置(没有部分移动到侧面),如果用户到达屏幕的 30% 以执行操作(例如保存项目以供稍后观看)并将项目返回到其初始 0% 位置。 Whatsapp 做的事情与我想要的非常相似,当向右滑动消息时,您可以重新发送消息。

这是我的代码

    public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback {
    private RecyclerItemTouchHelperListener listener;
    RecyclerView recyclerView;

    public RecyclerItemTouchHelper(int dragDirs, int swipeDirs, RecyclerItemTouchHelperListener listener, RecyclerView recyclerView) {
        super(dragDirs, swipeDirs);
        this.listener = listener;
        this.recyclerView = recyclerView;
    }

    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        Log.i("waeaweaweaeawe", "onMove");
        return true;
    }

    @Override
    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
        Log.i("waeaweaweaeawe", "onSelectedChanged");
        if (viewHolder != null) {
            final View foregroundView = ((clv_exibirPosts.ViewHolder) viewHolder).container_post;

            getDefaultUIUtil().onSelected(foregroundView);
        }
    }

    @Override
    public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
                                RecyclerView.ViewHolder viewHolder, float dX, float dY,
                                int actionState, boolean isCurrentlyActive) {

    }

    @Override
    public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        Log.i("waeaweaweaeawe", "clearView");
        final View foregroundView = ((clv_exibirPosts.ViewHolder) viewHolder).container_post;
        getDefaultUIUtil().clearView(foregroundView);
    }

    @Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView,
                            RecyclerView.ViewHolder viewHolder, float dX, float dY,
                            int actionState, boolean isCurrentlyActive) {





    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        Log.i("waeaweaweaeawe", "onSwiped");

    }

    @Override
    public int convertToAbsoluteDirection(int flags, int layoutDirection) {
        Log.i("waeaweaweaeawe", "convertToAbsoluteDirection");
        return super.convertToAbsoluteDirection(flags, layoutDirection);
    }

    public interface RecyclerItemTouchHelperListener {
        void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position);
    }
}

我不知道如何设置滑动手势可以拖动的最大距离。我在 stackOverflow 中发现了这个,这使我能够使布局不完全退出屏幕

super.onChildDraw(c, recyclerView, viewHolder, dX / 2, dY, actionState, isCurrentlyActive);

但这里有一些问题。

1 - 滑动速度很慢。

2 - 当滑动到允许滑动的整个宽度的 50% 时,对象继续更改其位置,使其保持在其最大允许位置(我希望项目在达到 50% 的滑动后始终返回到 0%允许。)

我浏览了整个互联网,没有发现任何关于它的例子。我确信这个问题不只是我的。如果您能给我一些线索、代码示例、帖子以及任何可能有帮助的东西,我将非常感激!

【问题讨论】:

    标签: java android android-recyclerview swipe swipe-gesture


    【解决方案1】:

    我认为这个库是你需要的https://github.com/yanzhenjie/SwipeRecyclerView

    如果您想自己实现,请查看查看代码 >图书馆本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-02
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多