gpt4 book ai didi

android - 将 Recycler View 项目拖放到 Image View

转载 作者:行者123 更新时间:2023-11-29 01:11:46 25 4
gpt4 key购买 nike

我想将回收站 View 项目图像拖放到我的 ImageView (位于主布局中)。我怎样才能做到这一点?

我正在使用下面的代码来处理 longItemClickRecyclerViewItem

images_recycler.addOnItemTouchListener(
new RecyclerItemClickListener(getActivity(), images_recycler ,new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {

}

@Override
public void onItemLongClick(View view, int position) {


}
})
);




public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener
{
public static interface OnItemClickListener
{
public void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
}

private OnItemClickListener mListener;
private GestureDetector mGestureDetector;

public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener)
{
mListener = listener;

mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener()
{
@Override
public boolean onSingleTapUp(MotionEvent e)
{
return true;
}

@Override
public void onLongPress(MotionEvent e)
{
View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());

if(childView != null && mListener != null)
{
mListener.onItemLongClick(childView, recyclerView.getChildPosition(childView));
}
}
});
}

@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e)
{
View childView = view.findChildViewUnder(e.getX(), e.getY());

if(childView != null && mListener != null && mGestureDetector.onTouchEvent(e))
{
mListener.onItemClick(childView, view.getChildPosition(childView));
}

return false;
}

@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent){}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}
}

请帮我举一些例子或代码谢谢。

最佳答案

在这里查看我的答案 Drag View and Drop it on RecyclerView item Android .
但是你必须在这里做一些改变。在 onCreateViewHolder 方法中将 longClickListener 设置到回收站 View iteView 并对其进行充气。在那里你开始拖动。将 onDragListener 设置为您的 ImageView 您想要放置它的位置。

编辑

好的,我在这里添加一些代码。在回收器适配器的 onCreateViewHolder 中添加以下行:

@Override
public MemberHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.yourlayout, parent, false);
view.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipData.Item item = new ClipData.Item((CharSequence) view.getTag());
String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData = new ClipData(view.getTag().toString(),
mimeTypes, item);
view.setVisibility(View.GONE);
HeptagonDragShadowBuilder myShadow = new HeptagonDragShadowBuilder(Heptagon.this, 1.1f);

if (VERSION.SDK_INT >= VERSION_CODES.N) {
view.startDragAndDrop(dragData, myShadow, null, 0);
} else {
view.startDrag(dragData, myShadow, null, 0);
}
return true;
}
});

return memberHolder;
}

在您要放置项目的 ImageView 中添加以下行:

imageView.setOnDragListener(new OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {

switch (dragEvent.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// drag has started, return true to tell that you're listening to the drag
return true;

case DragEvent.ACTION_DROP:
// the dragged item was dropped into this view
Category a = items.get(getAdapterPosition());
a.setText("dropped");
notifyItemChanged(getAdapterPosition());
return true;
case DragEvent.ACTION_DRAG_ENDED:
// the drag has ended
return false;
}
return false;
}
});

编辑 2
好的,这是一个解释。当您将监听器分配给 View 时,您就是在告诉您要监听拖动事件。当拖动事件开始时,监听器的 onDrag 将被触发并执行 DragEvent.ACTION_DRAG_STARTED 操作。在这种情况下,在要放置项目的 View 监听器上返回 true 以告知此 View 想要捕获拖动的项目。当一个 View 被拖放到您正在收听的 View 上时,onDrag 会再次触发 DragEvent.ACTION_DROP 操作。在那里,您必须实现放下项目时要执行的逻辑。如果您想更改 imageview 的图像源或替换 imageview,您必须在 DragEvent.ACTION_DROP 案例中实现替换逻辑。拖动事件和监听器只会告诉您您正在拖动以及您正在放下的位置。所以任何其他逻辑都必须由你来完成。就我而言,我通知我的 recyclerview 适配器某些项目已更改。

关于android - 将 Recycler View 项目拖放到 Image View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42482701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com