如何在android中拖放放置位置并从dragview中删除项目
maintactivity.java如何在android中拖放放置位置并从dragview中删除项目,android,Android,maintactivity.java public class MainActivity extends AppCompatActivity implements View.OnDragListener { private ListView mListView; private LinearLayout mFrameLayout; private List<ItemModel> mList = new ArrayList<>(); priv
public class MainActivity extends AppCompatActivity implements View.OnDragListener {
private ListView mListView;
private LinearLayout mFrameLayout;
private List<ItemModel> mList = new ArrayList<>();
private DraggingAdapter mDraggingAdapter;
View.OnLongClickListener dragListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
return true;
}
};
View.OnTouchListener touchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
Log.e("TouchListener Up", "X: " + view.getX() + ", Y: " + view.getY());
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.e("TouchListener Down", "X: " + view.getX() + ", Y: " + view.getY());
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = findViewById(R.id.listview);
mFrameLayout = findViewById(R.id.framelayout);
mDraggingAdapter = new DraggingAdapter(touchListener);
for (int i = 1; i <= 20; i++) {
mList.add(new ItemModel(false, i));
}
//mListView.setOnDragListener(this);
mFrameLayout.setOnDragListener(this);
mListView.setAdapter(mDraggingAdapter);
mDraggingAdapter.setData(mList);
}
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// Do nothing
Log.e("onDrag", "DragEvent.Action_drag_started");
break;
case DragEvent.ACTION_DRAG_ENTERED:
//v.setBackground(enterShape);
Log.e("onDrag", "DragEvent.Action_drag_entered");
break;
case DragEvent.ACTION_DRAG_EXITED:
//v.setBackground(normalShape);
Log.e("onDrag", "DragEvent.Action_drag_Exited");
break;
case DragEvent.ACTION_DRAG_LOCATION:
//Log.e("onDrag Location", "X: " + v.getX() + ", Y: " + v.getY());
break;
case DragEvent.ACTION_DROP:
Log.e("onDrag", "DragEvent.Action_drag_dropped");
// view dropped, reassign the view to the new ViewGroup
float xCoordinates = v.getX();
float yCoordinates = v.getY();
View view = (View) event.getLocalState();
Log.e("ACTION_DROP", "X: " + view.getX() + ", Y: " + view.getY());
ItemModel model = (ItemModel) view.getTag();
//DraggingAdapter owner = (DraggingAdapter) view.getParent();
//mList.remove((int) view.getTag());
LinearLayout container = (LinearLayout) v;
View viewCloning = LayoutInflater.from(MainActivity.this).inflate(R.layout
.item_view, null);
//viewCloning.setX(xCoordinates-(viewCloning.getWidth()/2));
//viewCloning.setY(yCoordinates-(viewCloning.getHeight()/2));
((AppCompatTextView) viewCloning.findViewById(R.id.textview)).setText("Textview " +
model.itemText);
if (!model.isDragged) {
model.isDragged = true;
mDraggingAdapter.notifyDataSetChanged();
viewCloning.setBackgroundResource(R.drawable.grey_background);
Log.e("Cloned View", "" + viewCloning.getWidth() + " " + viewCloning.getHeight());
int width = new Random().nextInt((container.getWidth() - viewCloning.getWidth()));
int height = new Random().nextInt((container.getHeight() - viewCloning
.getHeight()));
Log.e("Params Values: ", "Width: " + width + " Height: " + height);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(view.getWidth(),
view.getHeight());
viewCloning.setId(model.itemText);
viewCloning.setLayoutParams(params);
//viewCloning.setLayoutParams(positionParams);
//mDraggingAdapter.remove(mDraggingAdapter.getItem((int) view.getTag()));
//mDraggingAdapter.notifyDataSetChanged();
//((ViewGroup)view.getParent().getParent()).removeView((ViewGroup)view.getParent());
viewCloning.setTag(model);
//viewCloning.setOnLongClickListener(dragListener);
//viewCloning.setOnTouchListener(touchListener);
container.addView(viewCloning);
view.setVisibility(View.VISIBLE);
}
break;
case DragEvent.ACTION_DRAG_ENDED:
Log.e("onDrag", "DragEvent.Action_drag_Ended");
Log.e("DragListener Up", "X: " + v.getX() + ", Y: " + v.getY());
//v.setBackground(normalShape);
default:
break;
}
return true;
}
}
public类MainActivity扩展AppCompatActivity实现View.OnDragListener{
私有列表视图;
私人线路布局图;
private List mList=new ArrayList();
专用牵引适配器;
View.OnLongClickListener dragListener=新视图。OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图){
ClipData data=ClipData.newPlainText(“,”);
View.DragShadowBuilder shadowBuilder=新视图.DragShadowBuilder(视图);
view.startDrag(数据,shadowBuilder,视图,0);
返回true;
}
};
View.OnTouchListener touchListener=new View.OnTouchListener(){
@凌驾
公共布尔onTouch(视图、运动事件){
Log.e(“TouchListener Up”,“X:+view.getX()+”,Y:+view.getY());
if(event.getAction()==MotionEvent.ACTION\u向下){
Log.e(“触地监听”,“X:+view.getX()+”,Y:+view.getY());
返回true;
}else if(event.getAction()==MotionEvent.ACTION\u UP){
返回true;
}
返回false;
}
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView=findviewbyd(R.id.listview);
mFrameLayout=findViewById(R.id.framelayout);
mDraggingAdapter=新的拖动适配器(touchListener);
对于(inti=1;i0?data.size():0;
}
@凌驾
公共项模型getItem(int位置){
返回data.size()==0?新ItemModel(false,0):data.get(position);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=空;
如果(视图==null){
view=LayoutFlater.from(parent.getContext())。充气(R.layout.item_视图,父视图,
假);
}
ItemModel item=getItem(位置);
((AppCompatTextView)view.findViewById(R.id.textview)).settText(“textview”+item.itemText);
如果(!item.isDraged){
view.setOnLongClickListener(longClickListener);
//view.setOnTouchListener(touchListener);
}
查看.setBackgroundResource(item.IsDraged?R.drawable.selected_背景:R.drawable.grey_背景);
view.setTag(项目);
返回视图;
}
View.OnDragListener-OnDragListener=new View.OnDragListener()
{
@凌驾
公共布尔onDrag(视图v,DrageEvent事件){
返回false;
}
};
View.OnLongClickListener longClickListener=新视图。OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图){
ClipData data=ClipData.newPlainText(“,”);
View.DragShadowBuilder shadowBuilder=新视图.DragShadowBuilder(视图);
view.startDrag(数据,shadowBuilder,视图,0);
//view.setVisibility(view.INVISIBLE);
返回true;
}
};
View.OnTouchListener dragListener=new View.OnTouchListener(){
@凌驾
公共布尔onTouch(视图、运动事件、运动事件){
//在触摸事件中开始移动
if(motionEvent.getAction()==motionEvent.ACTION\u向下){
ClipData data=ClipData.newPlainText(“,”);
View.DragShadowBuilder shadowBuilder=新视图.DragShadowBuilder(视图);
view.startDrag(数据,shadowBuilder,视图,0);
//view.setVisibility(view.INVISIBLE);
返回true;
}
返回false;
}
};
公共无效设置数据(列表数据){
这个数据=数据;
notifyDataSetChanged();
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
tools:context="com.example.techjini.draganddrop.MainActivity">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent" android:fillViewport="true"
android:layout_weight="0.6">
<LinearLayout android:orientation="vertical"
android:id="@+id/framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ScrollView>
<ListView
android:id="@+id/listview"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:background="@android:color/white"
android:dividerHeight="10dp" />
</LinearLayout>
这是我的代码使用此代码,我可以从列表视图项拖放到DragView,这是滚动视图中的Linaerlayout,但当我从列表视图项拖放到DragView时,每当它设置左上角时,当我试图将列表视图项拖到我要拖放的相同位置时,它不应该移动到左上角和左上角因此,我想从拖动视图中删除项目我不知道如何从拖动视图中删除项目请建议如何实现此thanx只需遵循此简单的@向导我不必刷卡我必须将项目拖动到另一个视图,并且在listview中该项目仍将存在检查此@向导没有此帮助我检查并尝试了给定的代码我可以在另一个视图中拖动,但我想将其拖动到我无法完成的拖动结束位置。为了清楚起见,您想将
列表视图的行项目
拖动到线性布局
并垂直排列。对吗?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
tools:context="com.example.techjini.draganddrop.MainActivity">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent" android:fillViewport="true"
android:layout_weight="0.6">
<LinearLayout android:orientation="vertical"
android:id="@+id/framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ScrollView>
<ListView
android:id="@+id/listview"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:background="@android:color/white"
android:dividerHeight="10dp" />
</LinearLayout>