2012-06-21 3 views
7

내가보기를 XML 파일에서 설정하지만,이 같은하지 않는 코드 울부 짖는 소리처럼 뭔가를 수행하여 활동 만들 그것의 가능한 알고 만드는 방법 : 새로운 된 setContentView를 (myView (this));없이 활동 '된 setContentView (R.layout.main)'

이 코드를 사용하는 방법은 모르지만 사용자 정의 할 수있는 기능이 있습니다. 예를 들어 버튼을 코드에 추가하고 싶다면 어떻게할까요? 하나는 XML 레이아웃 수 있습니까?

감사의 말 전적으로 감사드립니다. 미리 감사드립니다.

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); 
      } 
    } 
    } 
} 

^^^^^^^^^^^^^^^ 어떻게 버튼 이미지 뷰의 위치를 ​​

을 답변? 이

enter image description here 새로운 코드를 (이미지가 다시 크기의 것을 무시) :

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); 
       } 
    } 
     } 
    } 

답변

14

당신은 (된 setContentView를 전달할 수 있습니다) 어떤 사진 울부 짖는 소리가 무슨 뜻인지를 보여줍니다 (이상적으로 상대 레이아웃을 사용) 보기의 형식, 레이아웃의 루트보기가됩니다. 다음은 버튼과 myView이있는 동적으로 빌드 된 LinearLayout입니다.

public 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); 
    } 
} 

이 된 setContentView()는 뷰 그룹을 통과 할 경우에만 루트보기로 아이 뷰를 추가 할 수 있음을 이해; 등 RelativeLayout의,의 LinearLayout처럼 다른 말로하면 은이 작업을 수행 할

 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); 

또한, 명명 규칙은 클래스 이름의 각 단어 첫 글자는 대문자로해야한다는 것을 의미한다. 그래서 myView는 다른 프로그래머와 정확한 색상 클래스 변수를 강조합니다 컴파일러에 대한 코드를 읽기 쉽게 만드는 최소한 MyView되어야한다.

+0

덕분에 내가 일하고 그것을 가지고 샘을 많이. 내 유일한 문제는 이제 myView/onDraw에서 만든 버튼과 imageView와 같은 항목의 위치를 ​​정하는 것입니다. 아프다는 의미를 보여주기 위해 질문을 업데이트하십시오. :) – user1472757

+0

임은 RelativeLayout의 레이아웃으로 = 새로운 RelativeLayout의 (이) 그것을 할 수 있습니다 추측; 하지만 어떻게 내가 내 대답에 코드를 업데이트 – user1472757

+0

user1472757 @ 감사합니다?, 버튼 및 이미지 뷰를 배치 할 수 있습니다. 각 속성 중 하나를 XML 속성은 동의어 자바 함수 인 "관련 방법"가지고있는 개발자 가이드, XML 또는 Java로 설정할 수 있습니다 (즉,있는 LinearLayout'안드로이드를 : orientation'은'setOrientation()'이다). – Sam

관련 문제