SurfaceView에서 작동하는 Camera Preview위에 어떠한 그림을 그리기 위해서는 OnDraw를 오버라이드하는 방법이 아니라 아래와 같이 그려주는 View를 Activity에 추가시켜 줘야합니다. 아래와 같이 addContentView를 호출해주시면 됩니다.
COPY TO CLIPBOARD | DOWNLOAD | RAW | EMBED | REPORT ABUSE
- public class TestCameraOverlay extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- Preview mPreview = new Preview(this);
- DrawOnTop mDraw = new DrawOnTop(this);
- setContentView(mPreview);
- addContentView(mDraw, new LayoutParams
- (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
- }
- }
그림을 그리는 View를 상속받은 DrawTop 클래스는 아래와 같이 OnDraw를 오버라이드하여 Canvas를 그려줄 수 있습니다. 저는 Path를 이용하여 삼각형을 그려봤습니다.
COPY TO CLIPBOARD | DOWNLOAD | RAW | EMBED | REPORT ABUSE
- public class DrawOnTop extends View{
- public DrawOnTop(Context context) {
- super(context);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- // TODO Auto-generated method stub
- Paint paint = new Paint();
- paint.setStyle(Paint.Style.FILL);
- paint.setColor(Color.BLACK);
- paint.setTextSize(20);
- canvas.drawText("Test Text", 20, 20, paint);
- paint.setStyle(Paint.Style.STROKE);
- paint.setStrokeWidth(2);
- paint.setColor(Color.RED);
- Path path = new Path();
- path.moveTo(50, 50);
- path.lineTo(100, 0);
- path.lineTo(150, 50);
- path.close();
- path.offset(110, 150);
- canvas.drawPath(path, paint);
- super.onDraw(canvas);
- }
- }
참조 : http://groups.google.com/group/android-developers/msg/6e1f453ac051f6bd?pli=1
참조 : http://stackoverflow.com/questions/3548666/overlay-images-onto-camera-preview-surfaceview