自动将ImageView拖放到RecyclerView项目

时间:2018-02-15 12:03:58

标签: android android-recyclerview drag-and-drop android-animation

我分别在ImageView的顶部和底部有RecyclerViewActivity。 ImageView可以在RecyclerView中的任何位置拖放,效果很好。 我接下来要做的是在点击RecyclerView项目时自动执行拖放动画。

有没有办法创建拖放动画而不实际使用ImageView和点击项目位置。

适配器 -

holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dragLocation.onAutoDragStart(holder.getAdapterPosition(),view);
                holder.root.setBackground(mContext.getResources().getDrawable(R.drawable.envoy_orange_corner));
            }
        });

活动 -

@Override
    public void onAutoDragStart(int position, View view) {
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(mRlAvatar);
            mRlAvatar.startDrag(data, shadowBuilder, mRlAvatar, 0);

            //code for drag and drop animation

    //        mRlAvatar.animate()
    //                .x(view.getX())
    //                .y(view.getY())
    //                .setDuration(1000)
    //                .start();
            }

1 个答案:

答案 0 :(得分:0)

在活动布局中添加FrameLayout,然后将头像视图克隆到确切位置,并在长按时动画为RecyclerView项坐标。

@Override
public void onAutoDragStart(int position, View view) {
    int[] originalPos = new int[2];
    view.getLocationInWindow(originalPos);
    final int x = originalPos[0];
    final int y = originalPos[1];

    int[] originalPosA = new int[2];
    mRlAvatar.getLocationInWindow(originalPosA);
    final int xA = originalPosA[0];
    final int yA = originalPosA[1];

    final View avatarView = LayoutInflater.from(this).inflate(R.layout.avatar_view, null);
    avatarView.setX(xA);
    avatarView.setY(yA);
    ((FrameLayout) findViewById(R.id.base_frame)).addView(avatarView);
    avatarView.animate().x(x).y(y).setListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            ((FrameLayout) findViewById(R.id.base_frame)).removeView(avatarView);
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });
}