Android Dra og Drop

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