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

标签 android drag-and-drop

我已经在我的应用中实现了拖放功能。我有四个 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/

相关文章:

qt+pyqt 发出两次丢弃的 URL

java - 为对话框添加额外内容

android - 如何让 ODK Android 应用程序(我无法修改其源代码)信任来自本地主机的假证书?

android - 我无法将 textview 字符串存储到 Android 中的 Sqlite 数据库中。下面是我的DatabaseHelper代码

javascript - Angular 拖放列出单独容器中的项目

jQuery iFrame 拖动不起作用

dojo.dnd一次仅一项

javascript - 拖动的 div 改变目的地的位置

android - 如何在 Android 中滚动 "infinitely"宽 View ?

javascript - 使用 Android 应用程序运行 HTML5 网站 - 未响应消息