Android's kameraets hensigt gør det nemt at tage billeder

Hvis du har brugt computere i meget lang tid, er du uden tvivl fortrolig med forkortelsen KISS, jeg første gang løb over udtrykket langt tilbage i højtiden af ​​TRS-80.

Da jeg var 12 år skrev jeg, hvad jeg syntes var en meget imponerende version af Lunar Lander. Jeg sendte den ud til en publikation i håb om, at redaktøren muligvis kører en artikel om det og måske endda kalder mig op til et interview; I stedet modtog jeg en kort, håndskrevet note, der meget høfligt afviste mit mesterværk med initialerne, som KISS skrabet i bunden. Et par år senere skrev min lærer til programmering i gymnasiet KISS på tavlen og under den: "Hold det enkelt, dumt!" Der lyste et lys i mit hoved, og jeg huskede straks afvisningsbrevet. Jeg blev samtidig glad og fornærmet.

I disse dage hører jeg fra nogle af mine yngre kohorter, at det læres som: "Hold det superenkelt." Uanset hvad, er meningen klar, og jeg er en fast tro på, at oftere end ikke den enkleste løsning på noget problem er den bedste.

Da Android har fortsat modnet som en platform og som forbrugerenhed, er kameraet forbedret dramatisk. Efterhånden som kameraet er vokset, har API'en det også. Googles kamera API gør det muligt at integrere hele fototagningsprocessen fra eksempelvisning til redigering direkte i din app. Når det er sagt, bare fordi det er muligt at gøre noget, betyder det ikke, at du skal gøre det.

Den indbyggede kamera-app, der leveres med alle Android-telefoner, er smuk poleret, og siden version 1.0 af Android er den blevet udsat via Android's intention model. Jeg er sikker på, at der er mennesker, der har en god grund til tæt at integrere hele kamerafunktionaliteten i en app, men for mine penge er det den rette vej at drage fordel af kameraappen, der kommer som en del af basesystemets tilbud.

Denne tutorial demonstrerer, hvordan du åbner den indbyggede kamera-app fra dit eget program, og returnerer derefter det resulterende billede. Du kan følge med nedenstående trin eller downloade hele projektet og importere det direkte til Eclipse.

1. Åbn Eclipse og opret et nyt Android-projekt. Mål Android 1.6 eller nyere. Sørg for at omdøbe startaktiviteten til Main.java.

2. Fordi vi drager fordel af den indbyggede kamera-app til at fange et foto, behøver vi ikke nogen specielle tilladelser i vores manifest - vi kan starte direkte med at oprette en main.xml-fil i vores / resource / layout-mappe . Layouten består af en billedvisning og to knapper.

 "1.0" encoding = "utf-8" ?> 
 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "lodret" > 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Brug af kameraets intention." 
 android: polstring = "10dip" 
 android: tyngdekraft = "center" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: orientering = "vandret" > 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Snap!" 
 android: id = "@ + id / snap" /> 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Rotate!" 
 android: id = "@ + id / roter" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: minHeight = "100dip" 
 android: id = "@ + id / foto_holder" /> 

3. Gå til vores /src/Main.java-fil, hvor vi definerer et par klassevariabler og trækker op vores knapper i on create tilsidesættelse.

 pakke com.authorwjf.camera; 
 import java.io.File; 
 import android.app.Aktivitet; 
 import android.content.ContentResolver; 
 import android.content.Intent; 
 import android.graphics.Bitmap; 
 import android.graphics.Matrix; 
 import android.net.Uri; 
 import android.os.Bundle; 
 import android.os. Miljø; 
 import android.provider.MediaStore; 
 import android.view.View; 
 import android.view.View.OnClickListener; 
 import android.widget.Button; 
 import android.widget.ImageView; 
 import android.widget.Toast; 
 import com.authorwjf.camera.R; 
 public class Main udvider Aktivitetsimplementeringer OnClickListener { 
 privat statisk endelig int TAKE_PICTURE = 0; 
 privat Uri mUri; 
 privat Bitmap mPhoto; 
 @Override 
 offentligt tomrum onCreate (Bundle gemtInstanceState) { 
 super .onCreate (gemtInstanceState); 
 setContentView (R.layout. main ); 
 ((Knap) findViewById (R.id. Snap )). SetOnClickListener ( dette ); 
 ((Knap) findViewById (R.. Roteres)). SetOnClickListener ( dette ); 
 } 
 } 

4. Knappebehandleren består af en sagsangivelse, der er ansvarlig for at starte kameraet og muligvis dreje billedet. Hvorfor har vi brug for en knap for at rotere billedet? Godt spørgsmål. Efter min erfaring, der er baseret på de mange formfaktorer, som Android-enheder kommer i, er der ingen god måde at vide, om kamera-appen vil standardbilleder til liggende eller portræt. En knap, der giver brugeren mulighed for straks at rotere billedet, hvis nødvendigt, er en hurtig, universal løsning.

 @Override 
 offentligt ugyldigt onClick (Vis v) { 
 if (v.getId () == R.id. snap ) { 
 Intens i = ny hensigt ("android.media.action.IMAGE_CAPTURE"); 
 Fil f = ny fil (Miljø. GetExternalStorageDirectory (), "photo.jpg"); 
 i.putExtra (MediaStore. EXTRA_OUTPUT, Uri. fra fil (f)); 
 mUri = Uri. fra fil (f); 
 startActivityForResult (i, TAKE_PICTURE ); 
 } andet { 
 if (mPhoto! = null ) { 
 Matrixmatrix = ny Matrix (); 
 matrix.postRotate (90); 
 mPhoto = Bitmap. createBitmap (mPhoto, 0, 0, mPhoto.getWidth (), mPhoto.getHeight (), matrix, sand ); 
 ((ImageView) findViewById (R.id. Photo_holder )). SetImageBitmap (mPhoto); 
 } 
 } 
 } 

5. Overstyr tilbagekaldet af aktivitetsresultatet og importer billedet fra indholdsudbyderen og anvend det derefter på vores billedvisning.

 @Override 
 public void onActivityResult ( int requestCode, int resultCode, Intent data) { 
 super .onActivityResult (requestCode, resultCode, data); 
 switch (requestCode) { 
 sag TAKE_PICTURE : 
 if (resultCode == Aktivitet. RESULT_OK ) { 
 getContentResolver (). notifyChange (mUri, null ); 
 ContentResolver cr = getContentResolver (); 
 prøv { 
 mPhoto = android.provider.MediaStore.Images.Media. getBitmap (cr, mUri); 
 ((ImageView) findViewById (R.id. Photo_holder )). SetImageBitmap (mPhoto); 
 } fangst (undtagelse e) { 
 Ristet brød. makeText ( dette, e.getMessage (), Toast. LENGTH_SHORT ) .show (); 
 } 
 } 
 } 
 } 

I et forsøg på at holde koden så kort som muligt beskæftiger jeg mig ikke med orienteringsændringer eller kaldes genbrug på bitmap-ressourcen; Hvis du beslutter at bruge denne kode i et live-program, skal du gøre begge dele. Med henblik på vores tutorial kan den resulterende app muligvis køres på emulatoren, men kamerastøtte i emulatoren er lidt uhyggelig og kræver et ADB-billede med SDRAM.

I overensstemmelse med vores mantra om at holde ting så enkle som muligt anbefaler jeg at downloade appen direkte til din enhed og prøve det fra første hånd. Forhåbentlig bliver du mere imponeret, end min kat var med den ( figur A )! Figur A

© Copyright 2021 | pepebotifarra.com