2012-06-13 147 views
3

任何人都可以幫助我如何編寫圖像的程序,可以拖動屏幕?你可以給我一個示例代碼。非常感謝。我怎麼能爲它做一個遊戲分數。我會感謝你的迴應。如何在屏幕上拖動圖像

+0

對不起,我忙起身過去的這個日子,順便說一句謝謝,爲我的遊戲工作,再次感謝。 – Jerome

回答

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

下面這段代碼是設置阻力聽衆

MyDragEventListener mDragListen = new MyDragEventListener(); 

這是拖聽衆

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