如何在 android 中拖放时获取视图?
How to get the view while drag & dropping in android?
我已经在我的应用程序中实现了拖放功能。我有四个 textview
视图并且我有拖放功能。但我想知道哪个 textview
被拖放了?我想知道哪个 textview
是放置目标,哪个 textview
是按我的代码中定义的名称拖动的。
以下是相关代码:
初始化视图的代码
public void initView()
{
p_one = (TextView) findViewById(R.id.tgoal_tvone);
p_two = (TextView) findViewById(R.id.tgoal_tvtwo);
p_three = (TextView) findViewById(R.id.tgoal_tvthree);
p_four = (TextView) findViewById(R.id.tgoal_tvfour);
query = (ImageView) findViewById(R.id.tgoal_img_query);
tv_contentOne=(TextView)findViewById(R.id.tgoal_tvoneContent);
tv_contentTwo=(TextView)findViewById(R.id.tgoal_tvtwoContent);
tv_contentThree=(TextView)findViewById(R.id.tgoal_tvthreeContent);
tvContentFour=(TextView)findViewById(R.id.tgoal_tvfourContent);
query.setOnClickListener(this);
//set touch listeners
tv_contentOne.setOnTouchListener(new ChoiceTouchListener());
tv_contentTwo.setOnTouchListener(new ChoiceTouchListener());
tv_contentThree.setOnTouchListener(new ChoiceTouchListener());
tvContentFour.setOnTouchListener(new ChoiceTouchListener());
//set drag listeners
tv_contentOne.setOnDragListener(new ChoiceDragListener());
tv_contentTwo.setOnDragListener(new ChoiceDragListener());
tv_contentThree.setOnDragListener(new ChoiceDragListener());
tvContentFour.setOnDragListener(new ChoiceDragListener());
/**set up the action bar**/
ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC")));
bar.setTitle(getResources().getString(R.string.tgoal_header));
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
}
获取下拉视图的代码
class ChoiceDragListener implements OnDragListener
{
int count=0;
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
View dragView = (View) event.getLocalState();
switch (event.getAction())
{
case DragEvent.ACTION_DRAG_STARTED:
//no action necessary
break;
case DragEvent.ACTION_DRAG_ENTERED:
//no action necessary
break;
case DragEvent.ACTION_DRAG_EXITED:
//no action necessary
break;
case DragEvent.ACTION_DROP:
//handle the dragged view being dropped over a drop view
//handle the dragged view being dropped over a target view
View view = (View) event.getLocalState();
//stop displaying the view where it was before it was dragged
//view dragged item is being dropped on
TextView dropTarget = (TextView) v;
//view being dragged and dropped
TextView dropped = (TextView) view;
String droppedTarget=dropTarget.getText().toString();
dropTarget.setText(dropped.getText());
dropped.setText(droppedTarget);
//make it bold to highlight the fact that an item has been dropped
dropTarget.setTypeface(Typeface.DEFAULT_BOLD);
dropTarget.setBackgroundColor(getResources().getColor(R.color.papya_orange));
Log.i("log", "TV Dropped");
if(dropTarget==p_one)
{
Log.i("log", "Drop View is First TextView");
}
break;
case DragEvent.ACTION_DRAG_ENDED:
//no action necessary
break;
default:
break;
}
return true;
}
}
简单,只需在 onDrag() 回调中跟踪您的视图即可:
private int mDragResourceId;//DECLARE THIS FIELD
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
View dragView = (View) event.getLocalState();
//ADD THIS LINE
mDragResoruceId = dragView.getId();
//REST OF YOUR CODE
}
然后你可以使用这两种方法来跟踪你最后拖动的视图,都通过运行-time resource ID和design-time resource name:
private int getDragResId(){
return mDragResourceId;
}
private String getDragResName(){
return getResources().getResourceName(getDragResId());
}
祝你好运。
我已经在我的应用程序中实现了拖放功能。我有四个 textview
视图并且我有拖放功能。但我想知道哪个 textview
被拖放了?我想知道哪个 textview
是放置目标,哪个 textview
是按我的代码中定义的名称拖动的。
以下是相关代码:
初始化视图的代码
public void initView()
{
p_one = (TextView) findViewById(R.id.tgoal_tvone);
p_two = (TextView) findViewById(R.id.tgoal_tvtwo);
p_three = (TextView) findViewById(R.id.tgoal_tvthree);
p_four = (TextView) findViewById(R.id.tgoal_tvfour);
query = (ImageView) findViewById(R.id.tgoal_img_query);
tv_contentOne=(TextView)findViewById(R.id.tgoal_tvoneContent);
tv_contentTwo=(TextView)findViewById(R.id.tgoal_tvtwoContent);
tv_contentThree=(TextView)findViewById(R.id.tgoal_tvthreeContent);
tvContentFour=(TextView)findViewById(R.id.tgoal_tvfourContent);
query.setOnClickListener(this);
//set touch listeners
tv_contentOne.setOnTouchListener(new ChoiceTouchListener());
tv_contentTwo.setOnTouchListener(new ChoiceTouchListener());
tv_contentThree.setOnTouchListener(new ChoiceTouchListener());
tvContentFour.setOnTouchListener(new ChoiceTouchListener());
//set drag listeners
tv_contentOne.setOnDragListener(new ChoiceDragListener());
tv_contentTwo.setOnDragListener(new ChoiceDragListener());
tv_contentThree.setOnDragListener(new ChoiceDragListener());
tvContentFour.setOnDragListener(new ChoiceDragListener());
/**set up the action bar**/
ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC")));
bar.setTitle(getResources().getString(R.string.tgoal_header));
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
}
获取下拉视图的代码
class ChoiceDragListener implements OnDragListener
{
int count=0;
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
View dragView = (View) event.getLocalState();
switch (event.getAction())
{
case DragEvent.ACTION_DRAG_STARTED:
//no action necessary
break;
case DragEvent.ACTION_DRAG_ENTERED:
//no action necessary
break;
case DragEvent.ACTION_DRAG_EXITED:
//no action necessary
break;
case DragEvent.ACTION_DROP:
//handle the dragged view being dropped over a drop view
//handle the dragged view being dropped over a target view
View view = (View) event.getLocalState();
//stop displaying the view where it was before it was dragged
//view dragged item is being dropped on
TextView dropTarget = (TextView) v;
//view being dragged and dropped
TextView dropped = (TextView) view;
String droppedTarget=dropTarget.getText().toString();
dropTarget.setText(dropped.getText());
dropped.setText(droppedTarget);
//make it bold to highlight the fact that an item has been dropped
dropTarget.setTypeface(Typeface.DEFAULT_BOLD);
dropTarget.setBackgroundColor(getResources().getColor(R.color.papya_orange));
Log.i("log", "TV Dropped");
if(dropTarget==p_one)
{
Log.i("log", "Drop View is First TextView");
}
break;
case DragEvent.ACTION_DRAG_ENDED:
//no action necessary
break;
default:
break;
}
return true;
}
}
简单,只需在 onDrag() 回调中跟踪您的视图即可:
private int mDragResourceId;//DECLARE THIS FIELD
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
View dragView = (View) event.getLocalState();
//ADD THIS LINE
mDragResoruceId = dragView.getId();
//REST OF YOUR CODE
}
然后你可以使用这两种方法来跟踪你最后拖动的视图,都通过运行-time resource ID和design-time resource name:
private int getDragResId(){
return mDragResourceId;
}
private String getDragResName(){
return getResources().getResourceName(getDragResId());
}
祝你好运。