1

PrésentationFrameLayout 4: 3 aspect

J'ai mis une caméra dans mon application qui prend 4: 3 images rapport, voici mon appareil photo en XML

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/imageCapture"> 
</FrameLayout> 

Dans ma classe appareil photo I puis appelez ma surfaceview sur cet objet:

public FrameLayout preview; 
//,,, 
preview = (FrameLayout) rootView.findViewById(R.id.imageCapture); 
//... 
myCameraSurfaceView = new Surface(getActivity(), myCamera); 
preview.addView(myCameraSurfaceView); 

Tout fonctionne très bien, mais!

Le problème

Mon appareil photo prend 4: 3 photos, comme indiqué ci-dessous:

p.setPictureSize(bWidthFourThree, bHeightFourThree); 
myCamera.setParameters(param); 

Donc, mon image capturée est 4: 3 photo que je veux. MAIS mon aperçu de caméra (l'implémentation de framelayout/surfaceview) enveloppe tout l'écran.

Ce que je voudrais

Maintenant, je sais ce que le problème est, elle enveloppe l'écran parce que la largeur et la hauteur sont des parents de correspondance pour la mise en page du cadre. Ce que je voudrais est:

  • Définissez les paramètres de mise en page de cadre selon bWidthFourThree, BHeightFourThree. Cependant, entre les appareils, ces variables peuvent changer en raison du matériel de caméra différent, etc. Je ne peux donc pas coder en dur la largeur et la hauteur. Aussi mon SurfaceView pour la caméra est une classe interne à la classe de la caméra, donc je ne sais pas comment je peux obtenir les caméras variables de résolution avant de créer le framelayout

toute aide est appréciée, le cas échéant des informations supplémentaires sont nécessaires S'il vous plaît laissez-moi savoir et Ill mettre à jour ce poste

+0

Vous n'avez pas besoin d'avoir le FrameLayout dans votre fichier XML, vous pouvez en créer un nouveau et définir vos paramètres de mise en page (via FrameLayout.LayoutParams), vous pouvez donc seulement après avoir les dimensions de la caméra. Après cela, vous pouvez ajouter le FrameLayout à une autre vue (LinearLayout, c'est-à-dire). – FabioR

+0

Pourriez-vous me donner un exemple s'il vous plaît, je comprends ce que vous voulez dire pas comment le mettre en œuvre – PepsiVsCoke

+0

Je l'afficherai comme une réponse – FabioR

Répondre

0

Vous n'avez pas besoin de créer un FrameLayout avant d'avoir les valeurs de variables de la caméra. Disons que FrameLayout allait dans un LinearLayout. Vous le feriez par exemple et puis définissez ses paramètres, donc:

//I used getContext(), but you can change it to yours 
FrameLayout frameLayout = new FrameLayout(getContext()); 
//The layout parameters must ALWAYS be related to the parent. So, if it's a LinearLayout, you'll use LinearLayout.LayoutParams 
//Create the parameters using the dimensions you want 
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(bWidthFourThree, bHeightFourThree); 
//Add your FrameLayout to the LinearLayout passing the parameters 
yourLinearLayout.addView(frameLayout, layoutParams); 

De cette façon, vous instancier un FrameLayout et passer les dimensions de l'appareil photo après que vous les avez. Après cela, vous pouvez passer l'image à votre FrameLayout en ajoutant la vue (comme vous l'avez fait). Faites-moi savoir si cela vous aide, et, si oui, n'oubliez pas d'upvote/select comme réponse correcte. Si vous avez d'autres questions, répondez à cette réponse, bravo

+0

Je ne pense pas que ce soit possible, Si je vous montre le fichier, je pense qu'il fera plus sens. Jetez un oeil sur le readme.txt premier https://drive.google.com/open?id=0B4vL9wnJulKodmg4S0hyQ1NSSXc J'apprécie vraiment si vous pouvez aider ive été coincé sur cela depuis longtemps – PepsiVsCoke

+0

une idée sur la façon de résoudre? – PepsiVsCoke

+0

J'y jetterai un coup d'oeil plus tard et je vous le ferai savoir, mais d'après ce que j'ai vu c'est possible, pourquoi diriez-vous que ce n'est pas? – FabioR