J'essaie de mettre en place une application Android qui prendra une photo et le traitera d'une manière ou d'une autre. J'aimerais que la disposition soit similaire à Google Goggles. Signification, aperçu de la caméra sur le haut et quelques contrôles sur le bas à l'aide de l'orientation portrait.
J'ai construit une première version à l'aide de l'échantillon de code de ici . Cela fonctionne, mais je veux ajouter un bouton sur le bas. P>
J'ai modifié ma version principale.xml pour regarder comme suit (basé sur les commentaires de cet article): P>
E/AndroidRuntime( 199): Uncaught handler: thread main exiting due to uncaught exception E/AndroidRuntime( 199): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.beerometer/com.beerometer.ImageCapture}: android.view.InflateException: Binary XML file line #6: Error inflating class Android.view.SurfaceView E/AndroidRuntime( 199): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) E/AndroidRuntime( 199): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) E/AndroidRuntime( 199): at android.app.ActivityThread.access$2200(ActivityThread.java:119) E/AndroidRuntime( 199): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) E/AndroidRuntime( 199): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 199): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 199): at android.app.ActivityThread.main(ActivityThread.java:4363) E/AndroidRuntime( 199): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 199): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime( 199): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) E/AndroidRuntime( 199): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/AndroidRuntime( 199): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime( 199): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class Android.view.SurfaceView E/AndroidRuntime( 199): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) E/AndroidRuntime( 199): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) E/AndroidRuntime( 199): at android.view.LayoutInflater.inflate(LayoutInflater.java:407) E/AndroidRuntime( 199): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) E/AndroidRuntime( 199): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) E/AndroidRuntime( 199): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) E/AndroidRuntime( 199): at android.app.Activity.setContentView(Activity.java:1622) E/AndroidRuntime( 199): at com.beerometer.ImageCapture.onCreate(ImageCapture.java:37) E/AndroidRuntime( 199): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) E/AndroidRuntime( 199): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) E/AndroidRuntime( 199): ... 11 more E/AndroidRuntime( 199): Caused by: java.lang.ClassNotFoundException: Android.view.SurfaceView in loader dalvik.system.PathClassLoader@44bfc7b0 E/AndroidRuntime( 199): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) E/AndroidRuntime( 199): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) E/AndroidRuntime( 199): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) E/AndroidRuntime( 199): at android.view.LayoutInflater.createView(LayoutInflater.java:466) E/AndroidRuntime( 199): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) E/AndroidRuntime( 199): ... 20 more
3 Réponses :
Tout d'abord, votre mise en page ne vous donnera probablement pas ce que vous voulez. Pensez à utiliser un En outre, vous avez un duplicadice En termes d'exception, il peut y avoir plus de détails dans votre trace de pile qui vous manque, expliquant pourquoi Vous pouvez également expérimenter avec Cet exemple de livre comme Un autre relativelayout code>, avec la touche
CODE> ancré en bas et le
superficiel code> ancré en haut de l'écran et au sommet de la < code> bouton code>. p>
xmlns: android = "http://schemas.android.com/apk/res/andrroid" code> sur votre
superficiel code> que vous donez 't besoin. Celui de votre élément racinaire suffira. P>
startPreview () code> a échoué. Recherchez un "causé par" ou une autre ligne à mi-chemin à travers la trace de la pile. Si vous ne pouvez pas l'identifier, modifiez votre question et collez dans toute la trace de la pile (et de me faire passer par un commentaire sur cette réponse, car je ne saurai pas sur la modification autrement). P>
caméra code> APPLIC d'aperçu, pour voir s'il y a quelque chose à propos de la manière dont j'approche le problème qui fonctionne mieux pour votre situation. P>
Bonjour, merci beaucoup pour votre réponse. J'ai corrigé mon code comme vous l'avez suggéré, et maintenant j'obtiens une exception différente.
@Commonsware Puisse-je utiliser superfasionview dans un widget (j'ai lu que cela ne peut pas être fait, car il n'est pas pris en charge) pouvez-vous également consulter ce Allumez la caméra du widget à Nexus S et Galaxy Sii ?
@Vitobrothers: "Puis-je utiliser superficielView dans un widget" - si par "widget", vous voulez dire "widget d'application", alors non, vous ne pouvez pas utiliser de superficiel code> dans un widget d'application.
Si je ne manque pas quelque chose, vous ne pouvez pas simplement utiliser superfasionview tel quel. Vous avez besoin d'une classe dérivée de votre choix. Je crée généralement ce point de vue programmatiquement et donnez-le en plein écran. Mais vous pouvez couvrir des parties avec d'autres vues, y compris les boutons:
setContentView(new CameraView()); View mainscreen = getLayoutInflater().inflate(R.layout.mainscreen, null, false); ViewGroup.LayoutParams generalLayoutParam = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); addContentView(mainscreen, generalLayoutParam);
Il est possible, vérifiez l'exemple sur le dessus.
tu devrais être capable de. Mais maintenant, j'ai un problème où je reçois cette erreur sur Nexus 7, mais pas sur un autre appareil
@Lassikinnunen: Pouvez-vous être plus précis? Peut-être que votre erreur mérite-t-elle une question distincte?
Oui, vous pouvez utiliser une vue superficielle. Dans la superficielle, vous pouvez obtenir la superficie qui peut ensuite être utilisée pour définir la prévisualisation de la caméraDisplay.
camera.setPreviewDisplay(previewHolder);