카메라 프리뷰 화면위에 새로운 뷰를 사용해 이미지를 띄우고 싶습니다. 텍스트 같은경우는 잘 뜨는데 이미지는 뜨지않네요 코드 어떤부분을 고쳐야 될지 도와주시면 감사하겠습니다.
public class MainActivity extends Activity {
private Preview mPreview;
private DrawOnTop mDrawOnTop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
int permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA);
if(permissionCheck != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
0);
} else {
createPreview();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
createPreview();
} else {
finish();
}
return;
}
private void createPreview(){
mDrawOnTop = new DrawOnTop(this);
mPreview = new Preview(this, mDrawOnTop);
setContentView(mPreview);
addContentView(mDrawOnTop, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
}
}
class DrawOnTop extends View {
Bitmap imgMos;
Paint paint = new Paint();
public DrawOnTop(Context context){
super(context);
}
protected void onDraw(Canvas canvas){
imgMos = BitmapFactory.decodeResource(getResources(),R.drawable.mos_01);
imgMos = Bitmap.createScaledBitmap(imgMos, 20, 20, true);
canvas.drawText("가나다" , 10, 10 ,paint);
paint.setTextAlign(Paint.Align.LEFT);
paint.setTextSize(60);
}
}
class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
DrawOnTop mDrawOnTop;
boolean mFinished;
Preview(Context context, DrawOnTop drawOnTop) {
super(context);
mDrawOnTop = drawOnTop;
mFinished = false;
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
try {
mCamera.setPreviewDisplay(holder);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setRotation(180);
mCamera.setParameters(parameters);
// Preview callback used whenever new viewfinder frame is available
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera)
{
if ( (mDrawOnTop == null) || mFinished )
return;
mDrawOnTop.invalidate();
}
});
}
catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// Surface will be destroyed when we return, so stop the preview.
// Because the CameraDevice object is not a shared resource, it's very
// important to release it when the activity is paused.
mFinished = true;
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(320, 240);
parameters.setPreviewFrameRate(15);
parameters.setSceneMode(Camera.Parameters.SCENE_MODE_NIGHT);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}