Comment créer une activité sans 'setContentView(R. layout.principal)'
Je sais que c'est possible de créer de l'activité en faisant quelque chose comme le code ci-dessous, d'où la vue n'est pas définie à partir du fichier xml mais comme cela: setContentView(nouvelle-mavue(this));
Ce que je ne comprends pas, c'est comment utiliser ce code, mais ont encore la possibilité de le personnaliser, par exemple, si je voulais ajouter un bouton pour le code ci-dessous, comment je fais, parce que je ne peux pas simplement ajouter un à un xml de mise en page puis-je?
LA OU LES BONNES RÉPONSES À CE SERA TRÈS APPRÉCIÉ
merci à l'avance!
package com.faceapp;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.os.Bundle;
import android.view.View;
public class FaceappActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
setContentView(new myView(this));
}
private class myView extends View{
private int imageWidth, imageHeight;
private int numberOfFace = 5;
private FaceDetector myFaceDetect;
private FaceDetector.Face[] myFace;
float myEyesDistance;
int numberOfFaceDetected;
Bitmap myBitmap;
public myView(Context context) {
super(context);
//TODO Auto-generated constructor stub
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face5,
BitmapFactoryOptionsbfo);
imageWidth = myBitmap.getWidth();
imageHeight = myBitmap.getHeight();
myFace = new FaceDetector.Face[numberOfFace];
myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);
}
@Override
protected void onDraw(Canvas canvas) {
//TODO Auto-generated method stub
canvas.drawBitmap(myBitmap, 0, 0, null);
Paint myPaint = new Paint();
myPaint.setColor(Color.GREEN);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3);
for(int i=0; i < numberOfFaceDetected; i++)
{
Face face = myFace[i];
PointF myMidPoint = new PointF();
face.getMidPoint(myMidPoint);
myEyesDistance = face.eyesDistance();
canvas.drawRect(
(int)(myMidPoint.x - myEyesDistance),
(int)(myMidPoint.y - myEyesDistance),
(int)(myMidPoint.x + myEyesDistance),
(int)(myMidPoint.y + myEyesDistance),
myPaint);
}
}
}
}
^^^^^^^^^^^^^^^
Répondu
Comment la position de la touche et de l'imageview? (Idéalement à l'aide relative à disposition)
L'image ci-dessous vous montre ce que je veux dire:
(Ignorer que l'image a été redimensionnée)
NOUVEAU CODE:
package com.test;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
public class TesttActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
Button button = new Button(this);
button.setText("Button!");
layout.addView(button);
myView custom = new myView(this);
layout.addView(custom);
setContentView(layout);
}
private class myView extends View{
private int imageWidth, imageHeight;
private int numberOfFace = 5;
private FaceDetector myFaceDetect;
private FaceDetector.Face[] myFace;
float myEyesDistance;
int numberOfFaceDetected;
Bitmap myBitmap;
public myView(Context context) {
super(context);
//TODO Auto-generated constructor stub
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face5,
BitmapFactoryOptionsbfo);
imageWidth = myBitmap.getWidth();
imageHeight = myBitmap.getHeight();
myFace = new FaceDetector.Face[numberOfFace];
myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);
}
@Override
protected void onDraw(Canvas canvas) {
//TODO Auto-generated method stub
canvas.drawBitmap(myBitmap, 0, 0, null);
Paint myPaint = new Paint();
myPaint.setColor(Color.GREEN);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3);
for(int i=0; i < numberOfFaceDetected; i++)
{
Face face = myFace[i];
PointF myMidPoint = new PointF();
face.getMidPoint(myMidPoint);
myEyesDistance = face.eyesDistance();
canvas.drawRect(
(int)(myMidPoint.x - myEyesDistance),
(int)(myMidPoint.y - myEyesDistance),
(int)(myMidPoint.x + myEyesDistance),
(int)(myMidPoint.y + myEyesDistance),
myPaint);
}
}
}
}
OriginalL'auteur user1472757 | 2012-06-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer setContentView() toute forme de vue, à la vue de la racine de votre mise en page. Ci-dessous est construit dynamiquement LinearLayout avec un Bouton et votre
myView
.Comprendre que vous ne pouvez ajouter de l'enfant vues à la racine de votre point de vue si vous passer setContentView() ViewGroup; comme RelativeLayout, LinearLayout, etc. En d'autres termes, vous ne peut pas ce faire:
Aussi, convention de nommage suggère que chaque mot dans le nom d'une classe doit avoir la première lettre en majuscule. Donc
myView
devrait êtreMyView
, au minimum, il rend votre code plus facile à lire pour les autres programmeurs, et le compilateur mettra en valeur vos variables de classe avec la bonne couleur.Im deviner que vous pouvez le faire par RelativeLayout layout = new RelativeLayout(ce); Mais comment puis-je positionner le bouton et imageview?, Merci
J'ai mis à jour le code dans ma réponse. Chaque attribut peut être défini soit en XML ou en Java, dans le Guide du Développeur les attributs XML ont une "méthode" qui est un synonyme de Java de la fonction (c'est à dire pour LinearLayout
android:orientation
estsetOrientation()
).merci beaucoup! 😀
OriginalL'auteur Sam