簡體   English   中英

滑動手勢素材設計

[英]Swipe gesture material design

我正在讀卡片-材料設計 我想在布局中實現滑動手勢,但與此同時我遇到了一些問題。

這就是我想要的效果。

我當前使用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%。)

我在互聯網上四處張望,沒有找到有關此事的例子。 我敢肯定,這個問題不僅僅是我的。 如果您能給我一些提示,代碼示例,帖子,任何可能有幫助的信息,我將不勝感激!

我認為您需要的是這個庫https://github.com/yanzhenjie/SwipeRecyclerView

如果您想自己實現它 ,請查看 本身的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM