如何在SwipeMenuListView中垂直设置三个图标到SwipeMenuItem

时间:2016-04-01 08:01:28

标签: android android-studio

如何添加自定义SwipeMenuListView

当用户从列表视图中滑动任何项目时,我想在菜单中垂直放置三个图标,它将显示三个图标。

任何人都可以帮助我。

提前致谢。

喜欢这张图片 enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用此类来刷任何项目......

公共类SwipeDetector实现了View.OnTouchListener {

    private static final int MIN_DISTANCE = 300;
    private static final int MIN_LOCK_DISTANCE = 30; // disallow motion intercept
    private boolean motionInterceptDisallowed = false;
    private float downX, upX;
    private AudioObjectHolder holder;
    private int position;

    public SwipeDetector(AudioObjectHolder h, int pos) {
        holder = h;
        position = pos;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            downX = event.getX();
            return true; // allow other events like Click to be processed
        }

        case MotionEvent.ACTION_MOVE: {
            upX = event.getX();
            float deltaX = downX - upX;

            if (Math.abs(deltaX) > MIN_LOCK_DISTANCE && listView != null && !motionInterceptDisallowed) {
                listView.requestDisallowInterceptTouchEvent(true);
                motionInterceptDisallowed = true;
            }

            if (deltaX > 0) {
                holder.deleteView.setVisibility(View.GONE);
            } else {
                // if first swiped left and then swiped right
                holder.deleteView.setVisibility(View.VISIBLE);
            }

            swipe(-(int) deltaX);
            return true;
        }

        case MotionEvent.ACTION_UP:
            upX = event.getX();
            float deltaX = upX - downX;
            if (Math.abs(deltaX) > MIN_DISTANCE) {
                // left or right
                swipeRemove();
            } else {
                swipe(0);
            }

            if (listView != null) {
                listView.requestDisallowInterceptTouchEvent(false);
                motionInterceptDisallowed = false;
            }

            holder.deleteView.setVisibility(View.VISIBLE);
            return true;

        case MotionEvent.ACTION_CANCEL:
            holder.deleteView.setVisibility(View.VISIBLE);
            return false;
        }

    return true;
    }

    private void swipe(int distance) {
        View animationView = holder.mainView;
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) animationView.getLayoutParams();
        params.rightMargin = -distance;
        params.leftMargin = distance;
        animationView.setLayoutParams(params);
    }

    private void swipeRemove() {
        remove(getItem(position));
        notifyDataSetChanged();
    }
}

}