Android 如何创建没有'的活动;setContentView(R.layout.main)和#x27;
我知道可以通过下面的代码创建活动,其中视图不是从xml文件设置的,而是这样的:setContentView(newMyView(this)) 我不明白的是如何使用这段代码,但仍然能够自定义它,例如,如果我想在下面的代码中添加一个按钮,我该怎么做,因为我不能简单地将一个按钮添加到xml布局中,可以吗 对此,任何好的答案都将不胜感激 提前谢谢Android 如何创建没有'的活动;setContentView(R.layout.main)和#x27;,android,layout,views,Android,Layout,Views,我知道可以通过下面的代码创建活动,其中视图不是从xml文件设置的,而是这样的:setContentView(newMyView(this)) 我不明白的是如何使用这段代码,但仍然能够自定义它,例如,如果我想在下面的代码中添加一个按钮,我该怎么做,因为我不能简单地将一个按钮添加到xml布局中,可以吗 对此,任何好的答案都将不胜感激 提前谢谢 package com.faceapp; import android.app.Activity; import android.content.Conte
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);
}
}
}
}
package com.faceapp;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.PointF;
导入android.media.FaceDetector;
导入android.media.FaceDetector.Face;
导入android.os.Bundle;
导入android.view.view;
公共类FaceappActivity扩展了活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
setContentView(新myView(this));
}
私有类myView扩展了视图{
私有int-imageWidth、imageHeight;
私有int numberOfFace=5;
专用人脸检测器myFaceDetect;
私人人脸检测器。脸[]我的脸;
漂浮距离;
检测到int numberoface;
位图;
公共myView(上下文){
超级(上下文);
//TODO自动生成的构造函数存根
选项BitmapFactoryOptionsbfo=新的BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig=Bitmap.Config.RGB_565;
myBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.face5,
BitmapFactoryOptionsbfo);
imageWidth=myBitmap.getWidth();
imageHeight=myBitmap.getHeight();
myFace=新的FaceDetector.Face[numberOfFace];
myFaceDetect=新的人脸检测器(imageWidth、imageHeight、numberOfFace);
numberOfFaceDetected=myFaceDetect.findFaces(myBitmap,myFace);
}
@凌驾
受保护的void onDraw(画布){
//TODO自动生成的方法存根
drawBitmap(myBitmap,0,0,null);
绘制myPaint=新绘制();
myPaint.setColor(颜色.绿色);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.设置行程宽度(3);
对于(int i=0;i
^^^^^^^^^^^^^^^
回答
如何定位按钮和图像视图?(理想情况下使用相对布局)
下面的图片向您展示了我的意思:
(忽略图像已重新调整大小)
新代码:
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);
}
}
}
}
package.com.test;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.PointF;
导入android.media.FaceDetector;
导入android.media.FaceDetector.Face;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.LinearLayout;
公共类TesttActivity扩展了活动{
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout布局=新的LinearLayout(本);
按钮按钮=新按钮(此按钮);
button.setText(“button!”);
布局。添加视图(按钮);
myView自定义=新建myView(此);
layout.addView(自定义);
setContentView(布局);
}
私有类myView扩展了视图{
私有int-imageWidth、imageHeight;
私有int numberOfFace=5;
专用人脸检测器myFaceDetect;
私人人脸检测器。脸[]我的脸;
漂浮距离;
检测到int numberoface;
位图;
公共myView(上下文){
超级(上下文);
//TODO自动生成的构造函数存根
选项BitmapFactoryOptionsbfo=新的BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig=Bitmap.Config.RGB_565;
myBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.face5,
BitmapFactoryOptionsbfo);
imageWidth=myBitmap.getWidth();
imageHeight=myBitmap.getHeight();
myFace=新的FaceDetector.Face[numberOfFace];
myFaceDetect=新的人脸检测器(imageWidth、imageHeight、numberOfFace);
numberOfFaceDetected=myFaceDetect.findFaces(myBitmap,myFace);
}
@凌驾
受保护的void onDraw(画布){
//TODO自动生成的方法存根
drawBitmap(myBitmap,0,0,null);
绘制myPaint=新绘制();
myPaint.setColor(颜色.绿色);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.设置行程宽度(3);
对于(int i=0;ipublic class Example extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
// Define the LinearLayout's characteristics
layout.setGravity(Gravity.CENTER);
layout.setOrientation(LinearLayout.VERTICAL);
// Set generic layout parameters
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
Button button = new Button(this);
button.setText("Button!");
layout.addView(button, params); // Modify this
myView custom = new myView(this);
layout.addView(custom, params); // Of course, this too
setContentView(layout);
}
}
myView custom = new myView(this);
Button button = new Button(this);
button.setText("Button!");
custom.addView(button);
// Nope! Method "addView()" does not exist for a regular View...
setContentView(custom);