如何在拖动时获取视图;掉进android?

时间:2015-03-07 06:59:49

标签: android drag-and-drop

我已实施了拖拽和放大器在我的应用程序中删除功能。我有四个textview&我拖累但是我想知道哪个文本视图已被删除&掉线了?我想知道哪个textview是drop target&哪个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;
        }

    }

1 个答案:

答案 0 :(得分:6)

简单,只需在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 
    }

然后,您可以使用这两种方法来跟踪上次拖动的View,包括运行时资源ID和设计时资源名称:

private int getDragResId(){
   return mDragResourceId;
}

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

祝你好运。