【问题标题】:Automate drag and drop ImageView to a RecyclerView item自动将 ImageView 拖放到 RecyclerView 项
【发布时间】:2018-02-19 14:37:02
【问题描述】:

我在Activity 的顶部和底部分别有一个ImageView 和一个RecyclerView。 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();
            }

【问题讨论】:

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


    【解决方案1】:

    在活动布局中添加了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) {
    
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多