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