Jerome
Jerome

Reputation: 139

How to drag images around the screen

Can anyone help me on how to code program for an image that can be drag around the screen? Can you give me a sample code for it. thanks a lot. And how can i make a game score for it. i will appreciate your response.

Upvotes: 3

Views: 1934

Answers (1)

Sana
Sana

Reputation: 9915

imageView.setOnLongClickListener(new OnLongClickListener() {

            public boolean onLongClick(View v) {
                modeEdit = false;
                ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
                String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
                ClipData dragData = new ClipData(v.getTag().toString(), mimeTypes, item);

                // Instantiates the drag shadow builder.
                DragShadowBuilder myShadow = new MyDragShadowBuilder(treeBitmap);
                v.startDrag(dragData,  // the data to be dragged
                        myShadow,  // the drag shadow builder
                        treeBitmap,      // no need to use local data
                        0          // flags (not currently used, set to 0)
                );
                return true;
            }
        });

This code below is to set the drag listener

MyDragEventListener mDragListen = new MyDragEventListener();

This is the drag listener

protected class MyDragEventListener implements OnDragListener {

        public boolean onDrag(View v, DragEvent event) {
            final int action = event.getAction();

            switch(action) {

                case DragEvent.ACTION_DRAG_STARTED:
                    Log.d(TAG, "FIELD ACTION_DRAG_STARTED");
                    if (event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
                        v.invalidate();
                        return(true);
                    } 
                    else {
                        return(false);
                    }

                case DragEvent.ACTION_DRAG_ENTERED:
                    Log.d(TAG, "FIELD ACTION_DRAG_ENTERED");
                    treePresentInMyView = true;
                    //Toast.makeText(getApplicationContext(), "Dragged data entered", Toast.LENGTH_LONG).show();
                    v.invalidate();
                    return(true);

                case DragEvent.ACTION_DRAG_LOCATION:
                    Log.d(TAG, "FIELD ACTION_DRAG_LOCATION");
                    positionX = event.getX();
                    positionY = event.getY();
                    layoutParams = v.getLayoutParams();
                    return(true);

                case DragEvent.ACTION_DRAG_EXITED:
                    Log.d(TAG, "FIELD ACTION_DRAG_EXITED");
                    modeEdit = false;
                    treePresentInMyView = false;
                    //Toast.makeText(getApplicationContext(), "Dragged data exited", Toast.LENGTH_LONG).show();
                    v.invalidate();
                    return(true);

                case DragEvent.ACTION_DROP:
                    Log.d(TAG, "FIELD ACTION_DROP");
                    keyOfTree = event.getClipDescription().getLabel().toString();
                    Log.d(TAG, "KEY VALUE = "+keyOfTree);

                    final ImageView view = new ImageView(getApplicationContext());
                    String treeWidth = getResources().getString(R.string.treeWidth);
                    String treeHeight = getResources().getString(R.string.treeHeight);

                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(Integer.parseInt(treeWidth), Integer.parseInt(treeHeight));
                    view.setLayoutParams(params);
                    view.setImageResource(R.drawable.tree1);

                    //to get image width and height:
                    BitmapFactory.Options o = new BitmapFactory.Options();
                    o.inTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
                    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.tree1, o);
                    int w = bmp.getWidth();
                    int h = bmp.getHeight();

                    Log.d(TAG, "width = " + w + " height = " +h);
                    params.leftMargin = (int) positionX - w;//-w and -h so dragged image placed not at mouse
                    params.topMargin = (int) positionY - h;//    but where actual image is on map

                    view.setVisibility(View.VISIBLE);
                    openField.addView(view);
                    LinearLayout.LayoutParams paramsOpenField = new LinearLayout.LayoutParams(openFieldWidth, openFieldHeight);
                    openField.setLayoutParams(paramsOpenField);

                    try {
                        Thread.sleep(1000);
                    } 
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    v.invalidate();
                    return true;

                case DragEvent.ACTION_DRAG_ENDED:
                    Log.d(TAG, "FIELD ACTION_DRAG_ENDED");
                    v.invalidate();
                    if (event.getResult() & treePresentInMyView) {
                        Log.d(TAG, "(x,y) = ("+positionX+", "+positionY+")");
                        int subSubPlot = 0;
                        if (positionX > openField.measuredWidth/2) { //3 and 4
                            if (positionY > openField.measuredHeight/2) {
                                subSubPlot = 4;
                            }
                            else {
                                subSubPlot = 3;
                            }
                        }
                        else {
                            if (positionY > openField.measuredHeight/2) {
                                subSubPlot = 1;
                            }
                            else {
                                subSubPlot = 2;
                            }
                        }
                        double latitudeOfTree = mValues[0] + (Math.abs(mValues[0] - mValues[2]) / openField.measuredWidth) * positionX;
                        double longitudeOfTree = mValues[1] + (Math.abs(mValues[1] - mValues[3])/ openField.measuredHeight) * positionY;
//                      openField.drawTreeCoordinated(latitudeOfTree, longitudeOfTree, positionX, positionY);

                        return true;
                    } 
                    else {
                        return false;
                    }

                default:
                    Log.e(TAG,"Unknown action type received by OnDragListener.");
                break;
            };
            return false;
        }
    };

Upvotes: 4

Related Questions