2015-07-13 109 views
0

我試圖實現Android拖放。我得到的輸出: 我有兩個佈局,從第一個佈局我可以拖動圖標或圖像到下一個佈局。我的問題我無法洗牌我的圖片併合並意見。任何建議都會對我有所幫助。 謝謝Android的拖放(不能拖動圖像)

public class MainActivity extends Activity { 

    private ImageView myImage,myImage1,myImage2,myImage3; 
    private static final String IMAGEVIEW_TAG = "The Android Logo"; 
    private static final String IMAGEVIEW_TAG1 = "The Android Logo1"; 
    private static final String IMAGEVIEW_TAG2 = "The Android Logo2"; 
    private static final String IMAGEVIEW_TAG3 = "The Android Logo3"; 

/** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     myImage = (ImageView)findViewById(R.id.image); 
     myImage1 = (ImageView)findViewById(R.id.image1); 
     myImage2 = (ImageView)findViewById(R.id.image2); 
     myImage3 = (ImageView)findViewById(R.id.image3); 

     // Sets the tag 
     myImage.setTag(IMAGEVIEW_TAG); 
     myImage1.setTag(IMAGEVIEW_TAG1); 
     myImage2.setTag(IMAGEVIEW_TAG2); 
     myImage3.setTag(IMAGEVIEW_TAG3); 

     // set the listener to the dragging data 
     myImage.setOnLongClickListener(new MyClickListener()); 
     myImage1.setOnLongClickListener(new MyClickListener()); 
     myImage2.setOnLongClickListener(new MyClickListener()); 
     myImage3.setOnLongClickListener(new MyClickListener()); 

     findViewById(R.id.toplinear).setOnDragListener(new MyDragListener()); 
     findViewById(R.id.bottomlinear).setOnDragListener(new MyDragListener()); 

    } 

    private final class MyClickListener implements OnLongClickListener { 

     // called when the item is long-clicked 
     @Override 
     public boolean onLongClick(View view) { 
     // TODO Auto-generated method stub 

      // create it from the object's tag 
      ClipData.Item item = new ClipData.Item((CharSequence)view.getTag()); 

      String[] mimeTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN }; 
      ClipData data = new ClipData(view.getTag().toString(), mimeTypes, item); 
      DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 

      view.startDrag(data, //data to be dragged 
          shadowBuilder, //drag shadow 
          view, //local data about the drag and drop operation 
          0 //no needed flags 
         ); 


      view.setVisibility(View.INVISIBLE); 
      return true; 
     } 
    } 

    class MyDragListener implements OnDragListener { 
     Drawable normalShape = getResources().getDrawable(R.drawable.normal_shape); 
     Drawable targetShape = getResources().getDrawable(R.drawable.target_shape); 

     @Override 
     public boolean onDrag(View v, DragEvent event) { 

      // Handles each of the expected events 
      switch (event.getAction()) { 

      //signal for the start of a drag and drop operation. 
      case DragEvent.ACTION_DRAG_STARTED: 
       // do nothing 
       break; 

      //the drag point has entered the bounding box of the View 
      case DragEvent.ACTION_DRAG_ENTERED: 
       v.setBackground(targetShape); //change the shape of the view 
       break; 

      //the user has moved the drag shadow outside the bounding box of the View 
      case DragEvent.ACTION_DRAG_EXITED: 
       v.setBackground(normalShape); //change the shape of the view back to normal 
       break; 

      //drag shadow has been released,the drag point is within the bounding box of the View 
      case DragEvent.ACTION_DROP: 
       // if the view is the bottomlinear, we accept the drag item 
        if(v == findViewById(R.id.bottomlinear)) { 
         View view = (View) event.getLocalState(); 
         ViewGroup viewgroup = (ViewGroup) view.getParent(); 
         viewgroup.removeView(view); 

         //change the text 
        // TextView text = (TextView) v.findViewById(R.id.text); 
        // text.setText("The item is dropped"); 

        GridLayout containView = (GridLayout) v; 
         containView.addView(view); 
         view.setVisibility(View.VISIBLE); 
        } else { 
         View view = (View) event.getLocalState(); 
         view.setVisibility(View.VISIBLE); 
         Context context = getApplicationContext(); 
         Toast.makeText(context, "You can't drop the image here", 
               Toast.LENGTH_LONG).show(); 
         break; 
        } 
        break; 

      //the drag and drop operation has concluded. 
      case DragEvent.ACTION_DRAG_ENDED: 
       v.setBackground(normalShape); //go back to normal shape 

      default: 
       break; 
      } 
      return true; 
     } 
    } 
} 

回答

0

爲什麼你不能洗你的圖片和合並,那是因爲你沒有正確處理丟棄事件的看法的原因。

看看這個拖放開源例如:

https://github.com/theredsunrise/AndroidCoolDragAndDropGridView

+0

感謝you..I有一個查詢我只是想分屏自上而下..我從第一屏的意思是我想拖圖像到下一個屏幕..不尋呼。任何建議都會有幫助 –