gpt4 book ai didi

android - 如何在android中拖放时获取 View ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:31:27 25 4
gpt4 key购买 nike

我已经在我的应用中实现了拖放功能。我有四个 textview View ,并且可以拖放。但是我想知道哪个 textview 被拖放了?我想知道哪个 textview 是放置目标以及哪个 textview 是按我的代码中定义的名称拖动的。

代码如下:

初始化 View 的代码

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);

}

获取下拉 View 的代码

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() 回调中跟踪您的 View :

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
}

然后您可以使用这两种方法通过运行时资源 ID 和设计时资源名称来跟踪您最后拖动的 View :

private int getDragResId(){
return mDragResourceId;
}

private String getDragResName(){
return getResources().getResourceName(getDragResId());
}

祝你好运。

关于android - 如何在android中拖放时获取 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28912326/

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