Android dra /slipp rammeverket tillater brukerne å flytte data fra en til en annen visning i gjeldende layout ved hjelp av et grafisk dra og slipp gest. Per  API 11 
 dra og slipp av syn på andre visninger eller vise grupper er supported.The rammeverk omfatter følgende tre viktige komponenter for å støtte dra & slipp-funksjonalitet og minus; 
 
 
  Drag event Klasse: 
 
 
  Dra lyttere: 
 
 
  Helper metoder og klasser: 
 
 The Drag /Drop Process 
 
 Det er i utgangspunktet fire trinn eller stater i drag og slippe prosessen: 
 
 
  Startet 
 − Denne hendelsen oppstår når du begynner å dra et element i en layout, program samtaler  startdrag () 
 metode for å fortelle systemet til å starte en hemsko. Argumentene inne startdrag () -metoden gi data for å bli dratt, metadata for disse dataene, og en tilbakeringing for tegning dra skyggen. 
 
 Systemet første reagerer ved å ringe tilbake til programmet for å få en dra skygge. Det viser deretter dra skyggen på enheten. 
 
 Deretter sender systemet et drag arrangement med handlingstype  ACTION_DRAG_STARTED 
 til de registrerte dra hendelsen lyttere for alle Se objektene i den aktuelle layout. 
 
 Hvis du vil fortsette å motta dra arrangementer, blant annet en mulig nedgang hendelse, et drag hendelse lytteren må returnere  true 
, Hvis dra arrangementet lytteren returnerer false, da det ikke vil motta dra hendelser for dagens drift inntil systemet sender en dra arrangement med handlingstype ACTION_DRAG_ENDED 
 
 
  Fortsetter Anmeldelser og minus.; Brukeren fortsetter drag. Systemet sender ACTION_DRAG_ENTERED handling fulgt av ACTION_DRAG_LOCATION handling til den registrerte dra arrangementet lytteren for visningen der dra punktet går. Lytteren kan velge å endre sitt syn objektets utseende som svar på hendelsen eller kan reagere ved å markere sitt syn. 
 
 Den dra arrangementet lytteren får en ACTION_DRAG_EXITED aksjon etter at brukeren har flyttet dra skyggen utenfor markeringsrammen for . Vis 
 
 
  Droppet 
 − Brukeren slipper dratt element i markeringsrammen for en visning. Systemet sender Vis objektets lytteren en dra arrangement med handlingstype ACTION_DROP 
 
 
  Endte Anmeldelser og minus.; Like etter handlingstype ACTION_DROP, sender systemet ut en dra arrangement med handlingstype ACTION_DRAG_ENDED å indikere at dra operasjonen er over. 
 
 Den DragEvent Class 
 
 < b> DragEvent 
 representerer en hendelse som er sendt ut av systemet på ulike tidspunkter i løpet av en dra og slipp-operasjon. Denne klassen gir noen konstanter og viktige metoder som vi bruker under Drag /Drop prosessen. 
 
 konstanter 
 
 Følgende er alle konstanter heltall tilgjengelig som en del av DragEvent klasse. 
 Sr.No. konstanter & Description1  ACTION_DRAG_STARTED 
 
 signaliserer starten av en dra og slipp-operasjon. 
 2  ACTION_DRAG_ENTERED 
 
 Signaler til en visning som dra punktet har kommet inn i markeringsrammen for View. 
 3  ACTION_DRAG_LOCATION 
 
 Sendt til en visning etter ACTION_DRAG_ENTERED dersom dra skyggen er fortsatt innenfor visning objektets markeringsrammen. 
 4  ACTION_DRAG_EXITED 
 
 Signaler at brukeren har flyttet dra skyggen utenfor markeringsrammen for visning. 
 5  ACTION_DROP 
 
 Signaler til en visning som brukeren har sluppet dra skyggen, og dra punktet er innenfor markeringsramme av visningen. 
 6  ACTION_DRAG_ENDED 
 
 Signaler til en visning som dra og slipp-operasjon har konkludert. 
 
 Metoder 
 
 Følgende er noen viktige og mest brukte metodene tilgjengelig som en del av DragEvent klasse 
 Sr.No.Constants &.; Description1  int getAction () 
 
 Inspiser handlingen verdien av denne hendelsen .. 
 2  ClipData getClipData () 
 
 Returnerer ClipData objekt sendt til systemet som en del av samtalen til startdrag 
 3  ClipDescription getClipDescription () 
 
 Returnerer ClipDescription objekt som finnes i ClipData. 
 4  boolean getResult () 
 
 Gir en indikasjon på resultatet av dra og slipp-operasjon. 
 5  flyte getX () 
 
 Blir det X-koordinat for dra punktet. 
 6  flyte gety ( ) 
 
 Får Y koordinat dra punktet. 
 7  String toString () 
 
 Returnerer en strengrepresentasjon av denne DragEvent objektet. 
 
 Lytte etter Dra Hendelses 
 
 Hvis du ønsker noen av dine synspunkter innenfor et oppsett bør svare dra hendelsen da ditt syn enten redskaper  View.OnDragListener 
 eller oppsett  onDragEvent (DragEvent) 
 tilbakeringing metoden . Når systemet kaller metoden eller lytteren, sender den til dem en DragEvent objekt forklart ovenfor. Du kan ha både en lytter og en tilbakeringing metode for Vis objekt. Hvis dette skjer, kaller systemet først lytteren og deretter definert tilbakeringing så lenge lytteren returnerer true. 
 
 Kombinasjonen av  onDragEvent (DragEvent) 
 metode og  View.OnDragListener 
 er analogt til kombinasjonen av  onTouchEvent () Hotell og  View.OnTouchListener 
 brukes med berørings hendelser i gamle versjoner av Android. 
 
 Starte en Drag hendelse 
 
 Du starter med å lage en  ClipData Hotell og  ClipData.Item 
 for dataene blir flyttet. Som en del av  ClipData 
 objekt, supply metadata som er lagret i en  ClipDescription 
 objekt innenfor ClipData. For en dra og slipp-operasjon som ikke representerer data bevegelse, kan det være lurt å bruke  null 
 stedet for en faktisk objekt. 
 
 Neste enten du kan forlenge forlenge  View.DragShadowBuilder 
 for å skape et drag skygge for å dra utsikten eller bare du kan bruke  View.DragShadowBuilder (Vis) 
 å lage en standard drag skygge som er samme størrelse som den Vis argument gått til det, med berøringspunkt . sentrert i drag skyggen 
 
 Eksempel 
 
 Følgende eksempel viser funksjonaliteten til et enkelt Drag & Slippe å bruke  View.setOnLongClickListener () 
,  View.setOnTouchListener () Hotell og  View.OnDragEventListener () 
. 
 StepDescription1You vil bruke Android studio IDE å skape en Android applikasjon og navn det som  Min Application 
 under en pakke  com.example.saira_000.myapplication 
. Mens du oppretter dette prosjektet, må du  Target SDK Hotell og  kompilere med 
 på den nyeste versjonen av Android SDK til å bruke høyere nivåer av APIs.2Modify  src /MainActivity.java 
 fil og legge til koden for å definere hendelsen lyttere samt en samtale tilbake metoder for logobildet brukes i example.3Copy bilde abc.png i  res /drawable- * 
 mapper. Du kan bruke bilder med ulik oppløsning i tilfelle du ønsker å gi dem for annen devices.4Modify layout XML fil  res /layout /activity_main.xml 
 å definere standardvisningen av logoen images.5Run programmet til å lansere Android emulator og verifisere resultatet av endringene som er gjort i programmet. 
 Følgende er innholdet i den modifiserte hovedaktivitet filen  src /MainActivity.java 
. Denne filen kan inneholde hver av de grunnleggende livssyklus metoder 
 pakken com.example.saira_000.myapplication;. Import android.app.Activity, import android.content.ClipData, import android.content.ClipDescription; import android.support.v7 .app.ActionBarActivity, import android.os.Bundle, import android.util.Log, import android.view.DragEvent, import android.view.Menu, import android.view.MenuItem, import android.view.MotionEvent; import android. view.View, import android.widget.ImageView, import android.widget.RelativeLayout; public class MainActivity strekker Aktivitet {Imageview img; String msg; private android.widget.RelativeLayout.LayoutParams layoutParams; Override Beskyttet void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); img = (Imageview) findViewById (R.id.imageView); img.setOnLongClickListener (ny View.OnLongClickListener () {Override public boolean onLongClick (Vis v) {ClipData.Item element = new ClipData.Item ((CharSequence) v.getTag ()); String [] mimetyper = {ClipDescription.MIMETYPE_TEXT_PLAIN }; ClipData dragData = nye ClipData (v.getTag () toString (), mimetyper, pkt.); View.DragShadowBuilder myShadow = new View.DragShadowBuilder (img); v.startDrag (dragData, myShadow, null, 0); retur true;}}); img.setOnDragListener (ny View.OnDragListener () {Override public boolean onDrag (Vis v, DragEvent hendelse) {switch (event.getAction ()) {case DragEvent.ACTION_DRAG_STARTED: layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams (); Log.d (msg, "Handling er DragEvent.ACTION_DRAG_STARTED"); //Gjør ingenting break; case DragEvent.ACTION_DRAG_ENTERED: Log.d (msg, "Handling er DragEvent.ACTION_DRAG_ENTERED"); int x_cord = (int) hendelse. getX (); int y_cord = (int) event.getY (); break; case DragEvent.ACTION_DRAG_EXITED: Log.d (msg, "Handling er DragEvent.ACTION_DRAG_EXITED"); x_cord = (int) event.getX (); y_cord = (int) event.getY (); layoutParams.leftMargin = x_cord; layoutParams.topMargin = y_cord; v.setLayoutParams (layoutParams); gå i stykker; case DragEvent.ACTION_DRAG_LOCATION: Log.d (msg, "Handling er DragEvent.ACTION_DRAG_LOCATION"); x_cord = (int) event.getX (); y_cord = (int) event.getY (); gå i stykker; case DragEvent.ACTION_DRAG_ENDED: Log.d (msg, "Handling er DragEvent.ACTION_DRAG_ENDED"); //Gjør ingenting break; case DragEvent.ACTION_DROP: Log.d (msg, "ACTION_DROP event"); //Gjør ingenting break; standard: break; } Return true; }}); img.setOnTouchListener (ny View.OnTouchListener () {Override public boolean onTouch (Vis v, MotionEvent hendelse) {if (event.getAction () == MotionEvent.ACTION_DOWN) {ClipData data = ClipData.newPlainText ("", "" ); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder (img); img.startDrag (data, shadowBuilder, img, 0); img.setVisibility (View.INVISIBLE); return true;} else {return false;}}}); }Override Public boolean onCreateOptionsMenu (Meny menyen) {//Blås menyen; dette legger til elementer i handlingsfeltet hvis det er til stede. . getMenuInflater () blåse (R.menu.menu_main, menyen); return true; }Override Public boolean onOptionsItemSelected (MENUITEM element) {//Håndtak handlingen bar varen klikk her. Handlingsfeltet vil //automatisk håndtere klikker på Hjem /Opp-knappen, så lenge //som du angir en forelder aktivitet i AndroidManifest.xml. int id = item.getItemId (); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) {return true; } Returnere super.onOptionsItemSelected (element); }} 
 Etter vil være innholdet i  res /layout /activity_main.xml 
 fil − 
 < RelativeLayout xmlns: android = "http://schemas.android.com/apk/res /Android "xmlns: verktøy =" http://schemas.android.com/tools "android: layout_width =" match_parent "android: layout_height =" match_parent "android: paddingLeft =" @ dimen /activity_horizontal_margin "android: paddingRight =" @ dimen /activity_horizontal_margin "android: paddingTop =" @ dimen /activity_vertical_margin "android: paddingBottom =" @ dimen /activity_vertical_margin "verktøy: kontekst =" MainActivity ">. < TextView android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Dra og slipp Eksempel" android: id = "+ id /textView" android: layout_alignParentTop = "true" android: layout_centerHorizontal = " true "android: Tekststørrelse =" 30dp "/> < TextView android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Guider Point" android: id = "+ id /textView2" android: layout_below = "+ id /textView" android: layout_centerHorizontal = "true" android: Tekststørrelse = "30dp" android: textcolor = "# ff14be3c" /> > < Imageview android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: id = "+ id /bildeVis" android: src = "@ teikne /abc" android: layout_below = "+ id /textView2" android : layout_alignRight = "+ id /textView2" android: layout_alignEnd = "+ id /textView2" android: layout_alignLeft = "+ id /textView2" android: layout_alignStart = "+ id /textView2" /> < /RelativeLayout > 
 Følgende vil være innholdet i  res /verdier /strings.xml 
 å definere to nye konstanter og minus; 
 <? xml version = "1.0" encoding = "utf-8"? > < resources > < string name = "APP_NAME" > My Application < /string > < string name = "action_settings" > Innstillinger < /string > < /ressurser > 
 Følgende er innholdet mislighold av  AndroidManifest.xml 
 − 
 <? xml version = " 1.0 "encoding =" utf-8 "> < manifest xmlns:? android =" http://schemas.android.com/apk/res/android "pakken =" com.example.guidemo "android: version =" en "android: versjon =" 1.0 "> < bruker-SDK android: minSdkVersion = "11" android: targetSdkVersion = "22" /> < søknad android: allowBackup = "true" android: icon = "@ teikne /ic_launcher" android: label = "@ streng /APP_NAME" android: tema = "@ stil /AppTheme" > < aktivitet android: name = "com.example.guidemo.MainActivity" android: label = "@ streng /APP_NAME" > < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.LAUNCHER" /> < /intent-filter > < /aktivitets > < /søknad > < /manifest > 
 La oss prøve å kjøre ditt  Min Application 
 søknad. Jeg antar at du hadde laget ditt  AVD 
 mens du gjør oppsett miljø. For å kjøre programmet fra Android Studio, åpne en av prosjektets aktivitets filer, og klikk Kjør ikonet fra verktøylinjen. Android studio installerer programmet på AVD og starter den, og hvis alt er bra med oppsettet og søknad, vil det vise følgende Emulator vindu − 
 
Nå gjør lang klikk på det viste TutorialsPoint logoen og du vil se at logo image beveger seg litt etter 1 sekunder lang klikk fra sin plass, sin tid når du skal begynne å dra bildet. Du kan dra den rundt på skjermen og slippe den på et nytt sted. Anmeldelser

