2013-07-03 15 views
6

Android'in bir Sürükle ve Bırak örneğini uygulamaya çalışıyorum. Bir maddeye uzun süre bastıktan sonra onu bir hedef seviyeye sürükleyip oraya bırakıyorum. Bir şekilde başarılıyım. Ama farklı bir şey istiyorum. Böyle bir şey yapmış .. enter image description hereÖğeyi bir liste görünümünden sürükleyip dışarıdaki bir metne nasıl bırakabilirsiniz?

Ama liste görünümü için tüm öğeler eklemek istiyorum ve uzun liste görünümü üzerinde bastıktan sonra bir öğeyi yukarı pic eder, o zaman hedef seviyesi ve damlasına kadar öğeyi sürüklemek zorundadır orada. Sanırım bazı dersler denedi

public class MainActivity extends Activity { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 






    findViewById(R.id.mango).setOnLongClickListener(longListen); 
    findViewById(R.id.orange).setOnLongClickListener(longListen); 
    findViewById(R.id.apple).setOnLongClickListener(longListen); 
    findViewById(R.id.banana).setOnLongClickListener(longListen); 

    findViewById(R.id.drop_here).setOnDragListener(DropListener); 

    listview.setOnItemLongClickListener(new OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int pos, long id) { 
      // TODO Auto-generated method stub 

      Log.i("long clicked","pos"+" "+pos); 

      return true; 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

OnLongClickListener longListen = new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 

     DragShadow dragShadow = new DragShadow(v); 

     ClipData data = ClipData.newPlainText("", ""); 

     v.startDrag(data, dragShadow, v, 0); 

     return false; 
    } 
}; 

private class DragShadow extends View.DragShadowBuilder { 

    ColorDrawable greyBox; 

    public DragShadow(View view) { 
     super(view); 
     // TODO Auto-generated constructor stub 
     greyBox = new ColorDrawable(Color.LTGRAY); 
    } 

    @Override 
    public void onDrawShadow(Canvas canvas) { 
     // TODO Auto-generated method stub 
     // super.onDrawShadow(canvas); 

     greyBox.draw(canvas); 
    } 

    @Override 
    public void onProvideShadowMetrics(Point shadowSize, 
      Point shadowTouchPoint) { 
     // TODO Auto-generated method stub 
     // super.onProvideShadowMetrics(shadowSize, shadowTouchPoint); 
     View v = getView(); 

     int height = (int) v.getHeight()/2; 
     int width = (int) v.getWidth()/2; 

     greyBox.setBounds(0, 0, width, height); 
     shadowSize.set(width, height); 

     shadowTouchPoint.set(width/2, height/2); 

    } 


} 

OnDragListener DropListener = new View.OnDragListener() { 

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

     int dragEvent = event.getAction(); 

     switch (dragEvent) { 
     case DragEvent.ACTION_DRAG_ENTERED: 
      Log.i("Drag ", "Entered"); 
      break; 
     case DragEvent.ACTION_DRAG_EXITED: 
      Log.i("Drag ", "Exit"); 
      break; 
     case DragEvent.ACTION_DROP: 
      Log.i("Drag ", "Drop"); 

      TextView target = (TextView) v; 
      TextView dragg = (TextView) event.getLocalState(); 
      target.setText(dragg.getText()); 
      break; 
     default: 
      break; 
     } 

     return true; 
    } 
}; 

} 

... enter image description here

Benim Kod aşağıda verilmiştir .. Böyle bir şey istiyorum, ama oradan çözüm alamıyor. Android List View Drag and Drop sort

+0

Hedefte ne yapardı? Demek istediğim, yerinden mi ayrılmış? ve METİN'e dönüştürülür mü? – MAST3RMIND

+0

Hedef, hangi öğeyi sürüklediğimi gösterecek? Temel olarak bu kodu başka bir projeme eklemek istiyorum. Bazı diğer işlevselciler de eklenecek. Bu çözümü alırsam diğer gereksinimlerim karşılanır. – TKumar

cevap

7

Çözümü buldum. Bu kolay, sadece setOnItemClickListener içinde startDrag yöntemini çağırmak zorunda.

listview.setOnItemLongClickListener(new OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View v, 
       int pos, long id) { 
      // TODO Auto-generated method stub 


      v.startDrag(data, dragShadow, v, 0); 
      return true; 
     } 
    }); 
+6

Tüm kodunuzu, bu öğe öğesini sürükleyip bırakmak için gönderebilir misiniz? –

0

güzel öğretici burada http://www.vogella.com/articles/AndroidDragAndDrop/article.html Lars Vogel tarafından yoktur. Ama sadece Android 4 ve üstü (ICS'den sonra) çalışır.

o doesnt size bir nesneyi sürüklemek ve görmek için basit bir onTouchListener ekleyerek bir çözüm deneyin Eğer varsa nesne iken (sizin durumunuzda bir textview)

içine sürüklemek istediğiniz Görünüm sınırları içinde falls sürükleyerek Basit bir Drag ontouchlistener uygulaması şu adreste bulunabilir: https://stackoverflow.com/a/9398861/2138983

İlgili konular