这两天自己baidu+google,简单解决了一些问题,暂且先贴上来。
因为是我的一个作业,所以还有一些按钮的点击事件,大家可以忽略。
这些源码仅仅实现了简单的”将制定控件拖拽到某个区域“,还没有实现”拖拽到指定位置“,后续解决了之后会在贴上来
package com.example.alpha.app2_4;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipDescription;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.DragEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends Activity implements OnClickListener {
ListView lv1;
ListView lv2;
LinearLayout targetLayout,fromLayout;
ArrayAdapter arr_Adapter;
ArrayAdapterarr_Adapter2;
Button bt1;
Button bt2;
Button bt3;
Button bt4;
Button bt5;
Button bt6;
static int po_l = 0,po_r=0;
ArrayListarr_data1=new ArrayList(Arrays.asList("上海",
"南京", "武汉", "北京", "重庆", "深圳", "兰州", "沈阳") );
ArrayList arr_data2;
static Boolean flag=true;//定义左右标志
static int longClick_Flag;//定义长按左右标志
//实例化拖拽项目监听器
MyDragEventListener myDragEventListener=new MyDragEventListener();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1 = (Button) findViewById(R.id.button1);
bt2 = (Button) findViewById(R.id.button2);
bt3 = (Button) findViewById(R.id.button3);
bt4 = (Button) findViewById(R.id.button4);
bt5 = (Button) findViewById(R.id.button5);
bt6 = (Button) findViewById(R.id.button6);
lv1 = (ListView) findViewById(R.id.listView1);
lv2 = (ListView) findViewById(R.id.listView2);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
bt3.setOnClickListener(this);
bt4.setOnClickListener(this);
bt5.setOnClickListener(this);
bt6.setOnClickListener(this);
arr_Adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, arr_data1);
lv1.setAdapter(arr_Adapter);
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view,
int position, long id) {
po_l=position;
flag=true;//true即点击了lv1
Log.d("tag", "po_l="+po_l);
}
});
arr_data2=new ArrayList();
arr_Adapter2=new ArrayAdapter(this, android.R.layout.simple_list_item_1,arr_data2);
lv2.setAdapter(arr_Adapter2);
lv2.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
po_r=position;
flag=false;//false即点击了lv2
}
});
/**
* Drag_Start
*/
targetLayout= (LinearLayout) findViewById(R.id.TargetLayout);
fromLayout= (LinearLayout) findViewById(R.id.FromLayout);
lv1.setOnItemLongClickListener(lv1LongClickListener);
lv2.setOnItemLongClickListener(lv2LongClickListener);
lv1.setOnDragListener(myDragEventListener);
targetLayout.setOnDragListener(myDragEventListener);
fromLayout.setOnDragListener(myDragEventListener);
lv2.setOnDragListener(myDragEventListener);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
//左移
case R.id.button1:
if (lv2.getChildCount()>=po_r+1) {
String cu=(String)lv2.getItemAtPosition(po_r);
Log.d("tag", "count="+lv2.getChildCount()+"po_l"+po_r);
arr_data2.remove(po_r);
arr_data1.add(cu);
arr_Adapter.notifyDataSetChanged();
}
else {
Toast.makeText(MainActivity.this,"当前位置已无内容",Toast.LENGTH_SHORT).show();
}
arr_Adapter2.notifyDataSetChanged();
break;
//右移
case R.id.button2:
if (lv1.getChildCount()>=po_l+1) {
String cu=(String)lv1.getItemAtPosition(po_l);
Log.d("tag", "count="+lv1.getChildCount()+"po_l"+po_l);
arr_data1.remove(po_l);
arr_data2.add(cu);
arr_Adapter2.notifyDataSetChanged();
}
else {
Toast.makeText(MainActivity.this,"当前位置已无内容",Toast.LENGTH_SHORT).show();
}
arr_Adapter.notifyDataSetChanged();
break;
//全部左移
case R.id.button3:
arr_data1.addAll(arr_data2);
arr_data2.clear();
arr_Adapter.notifyDataSetChanged();
arr_Adapter2.notifyDataSetChanged();
break;
//全部右移
case R.id.button4:
arr_data2.addAll(arr_data1);
arr_data1.clear();
arr_Adapter.notifyDataSetChanged();
arr_Adapter2.notifyDataSetChanged();
break;
//上移
case R.id.button5:
if(flag&&po_l>0){
String ch=arr_data1.get(po_l);
arr_data1.remove(po_l);
arr_data1.add(po_l-1,ch);
arr_Adapter.notifyDataSetChanged();
po_l--;
}
else if(!flag&&po_r>0){
String ch=arr_data2.get(po_r);
arr_data2.remove(po_r);
arr_data2.add(po_r-1,ch);
arr_Adapter2.notifyDataSetChanged();
po_r--;
}
break;
//下移
case R.id.button6:
if(flag&&po_l
String ch=arr_data1.get(po_l);
arr_data1.remove(po_l);
arr_data1.add(po_l+1,ch);
arr_Adapter.notifyDataSetChanged();
po_l++;
}
else if(!flag&&po_r
String ch=arr_data2.get(po_r);
arr_data2.remove(po_r);
arr_data2.add(po_r+1,ch);
arr_Adapter2.notifyDataSetChanged();
po_r++;
}
break;
default:
break;
}
}
/**
* DragStart_to_End
*/
//listView1长按事件
AdapterView.OnItemLongClickListener lv1LongClickListener=new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
longClick_Flag=1;
//po_l=position;
// 将被拖动item传递到clipData
ClipData.Item item=new ClipData.Item(arr_data1.get(position));
String[] clipDescription={ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData=new ClipData((CharSequence) view.getTag(),clipDescription,item);
//制造拖动影像
View.DragShadowBuilder myShadow=new MyDragShadowBuilder(view);
view.startDrag(dragData,myShadow,arr_data1.get(position),0);
return true;
}
};
//listView2长按事件
AdapterView.OnItemLongClickListener lv2LongClickListener=new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
longClick_Flag=2;
//po_r=position;
// 将被拖动item传递到clipData
ClipData.Item item=new ClipData.Item(arr_data2.get(position));
String[] clipDescription={ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData=new ClipData((CharSequence) view.getTag(),clipDescription,item);
//制造拖动影像
View.DragShadowBuilder myShadow=new MyDragShadowBuilder(view);
view.startDrag(dragData,myShadow,arr_data2.get(position),0);
return true;
}
};
//监听拖拽事件和状态
protected class MyDragEventListener implements View.OnDragListener{
@Override
public boolean onDrag(View v, DragEvent event) {//v代表目标视图
//定义拖拽状态
final int action=event.getAction();
switch (action){
//鼠标长按下开始拖动
case DragEvent.ACTION_DRAG_STARTED:
// All involved view accept ACTION_DRAG_STARTED for
// MIMETYPE_TEXT_PLAIN
if (event.getClipDescription().hasMimeType(
ClipDescription.MIMETYPE_TEXT_PLAIN)) {
return true; // Accept
} else {
return false; // reject
}
case DragEvent.ACTION_DRAG_ENTERED:
return true;
case DragEvent.ACTION_DRAG_LOCATION:
return true;
case DragEvent.ACTION_DRAG_EXITED:
return true;
case DragEvent.ACTION_DROP:
// Gets the item containing the dragged data
//获取被拖动的item
ClipData.Item item = event.getClipData().getItemAt(0);
// If apply only if drop on buttonTarget
//由左向右拖动
if (v == targetLayout||v==lv2) {
String droppedItem = item.getText().toString();
arr_data2.add(droppedItem);
arr_Adapter2.notifyDataSetChanged();
arr_data1.remove(droppedItem);
arr_Adapter.notifyDataSetChanged();
return true;
}
//由右向左拖动
if (v == fromLayout||v==lv1) {
String droppedItem = item.getText().toString();
arr_data1.add(droppedItem);
arr_Adapter.notifyDataSetChanged();
arr_data2.remove(droppedItem);
arr_Adapter2.notifyDataSetChanged();
return true;
}
return true;
case DragEvent.ACTION_DRAG_ENDED:
return true;
default: // unknown case
return false;
}
}
}
//构造拖动影像
private static class MyDragShadowBuilder extends View.DragShadowBuilder{
private static Drawable shadow;
//生成影像
public MyDragShadowBuilder(View view) {
super(view);
shadow=new ColorDrawable(Color.LTGRAY);
}
//设置影像参数
@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
super.onProvideShadowMetrics(shadowSize, shadowTouchPoint);
int width=getView().getWidth();
int height=getView().getHeight();
shadow.setBounds(0,0,width,height);
shadowSize.set(width,height);
shadowTouchPoint.set(width/2,height/2);
}
//画影像
@Override
public void onDrawShadow(Canvas canvas) {
//super.onDrawShadow(canvas);
shadow.draw(canvas);
}
}
}
如果觉得《Android跨屏拖动item android中如何实现两个listview中的item可以互相拖拽移位?》对你有帮助,请点赞、收藏,并留下你的观点哦!