2014-01-30 3 views
3

내 안드로이드 앱에서 이미지 드래그를 사용하려고합니다. 내 이미지 드래그를 멈 추면 DragEvent.ACTION_DROP가 호출되지 않습니다. 돕는DragEvent.ACTION_DROP가 호출되지 않습니다

01-30 13:50:25.003: I/ViewRootImpl(2198): Reporting drop result: false 

감사 : 내 로그 고양이에서

나는이 전화를받을.

public class buildImage extends Activity implements OnTouchListener, OnDragListener 
{ 
    private LinearLayout slider; 
    private RelativeLayout board; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.build_image); 

     //drawing = (SignatureViewModed) findViewById(R.id.myTest); 
     slider = (LinearLayout) findViewById(R.id.imageSlider); 
     board = (RelativeLayout) findViewById(R.id.borad); 

     setImagesSlider(); 

    } 

    public void setImagesSlider() 
    { 
     ImageView image = new ImageView(this); 
     image.setLayoutParams(new LinearLayout.LayoutParams(100, 100)); 

     Drawable draw = getResources().getDrawable(R.drawable.images); 

     image.setImageDrawable(draw); 
     image.setOnDragListener(this); 

     image.setOnTouchListener(this); 

     slider.addView(image); 

    } 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     // TODO Auto-generated method stub 

     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      ClipData data = ClipData.newPlainText("tests", "test"); 
      DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
      view.startDrag(data, shadowBuilder, view, 0); 
      //view.setVisibility(View.INVISIBLE); 
      return true; 
      } else { 
      return false; 
      } 
    } 

    @Override 
    public boolean onDrag(View v, DragEvent event) { 
     // TODO Auto-generated method stub 

     int action = event.getAction(); 
      switch (event.getAction()) { 
      case DragEvent.ACTION_DRAG_STARTED: 
      { 
       Log.i("check6", "check6"); 
      // do nothing 
      return true; 
      } 
      case DragEvent.ACTION_DRAG_ENTERED: 
      { 
       Log.i("check4", "check4"); 
      //v.setBackgroundDrawable(enterShape); 
       return true; 
      } 
      case DragEvent.ACTION_DRAG_EXITED: 
      { 
      // v.setBackgroundDrawable(normalShape); 
       Log.i("check3", "check3"); 
       return true; 
      } 
      case DragEvent.ACTION_DROP: 
      // Dropped, reassign View to ViewGroup 

       Log.i("check", "check"); 
       addNewImage(event); 

       return true; 
      case DragEvent.ACTION_DRAG_ENDED: 
      { 
       Log.i("check2", "check2"); 


      // addNewImage(event); 

       return true; 
      } 
      default: 
      break; 
      } 
      return true; 
     } 

    public void addNewImage(DragEvent event) 
    { 
     ImageView image = new ImageView(this); 
     image.setLayoutParams(new LinearLayout.LayoutParams(100, 100)); 

     Drawable draw = getResources().getDrawable(R.drawable.images); 

     image.setImageDrawable(draw); 

     board.addView(image); 

     float x = event.getX(); 
     float y = event.getY(); 

     image.setX(x); 
     image.setY(y); 

     Log.i("margin", "x " + x + " y " + y); 

    } 

} 

내 XML

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:id="@+id/borad" 
      android:background="@android:color/darker_gray" 
      android:layout_above="@+id/temp" 
      android:layout_height="fill_parent" > 
     </RelativeLayout> 

     <ScrollView 
      android:layout_width="fill_parent" 
      android:id="@+id/temp" 
      android:layout_alignParentBottom="true" 
      android:layout_height="wrap_content" > 

      <LinearLayout 
       android:id="@+id/imageSlider" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" > 
      </LinearLayout> 
     </ScrollView> 

    </RelativeLayout> 
당신은에 해당 이미지를 삭제하기 위해 뭔가를해야

enter image description here

답변

3

:

여기 내 코드입니다. 지금까지는 이미지 자체에 OnDragListener 만 있습니다. 해당 이미지를 삭제하려는 지점에는 OnDragListener가있는 컨트롤이 없으므로 Listener가 호출되지 않습니다.

OnDragListeners를 수신하는 컨트롤은 보이지 않거나 사라질 수 없으므로 셀이 비어 있지만 보이지 않는 곳에 그리드를 배치해야합니다. 예를 들어 투명 이미지가있는 ImageView를 예로들 수 있습니다. 또는 알파를 0f로 설정하십시오.

최소한 OnDragListener를 내부 LinearLayout으로 설정하면 Drop 이벤트가 발생합니다.

관련 문제