如何在 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());
}

祝你好运。