본문으로 바로가기

안드로이드 AR 만들기 #1

category 카테고리 없음 2017. 11. 10. 11:20

오늘부터 안드로이드 AR을 만들어 보도록 하겠습니다.


먼저, 새프로젝트를 하나 만드시고 AndroidManifest.xml에 아래의 코드를 추가!!


             <uses-permission android:name="android.permission.CAMERA"></uses-permission>


그런 다음 MainActivity.java에 아래의 코드를 입력합시다.


class CameraView extends SurfaceView implements SurfaceHolder.Callback
{

SurfaceHolder mHolder;
Camera mCamera;

public CameraView(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
}

public CameraView(Context context, AttributeSet attrs) {
super(context, attrs);
mHolder = getHolder();
mHolder.addCallback(this);

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90); //안드로이드 폰은 기본적으로 카메라 default값이 가로 이기 때문에 세로로 촬영하기 위해서는 90도로 바꿔줘야한다.

try{
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
mCamera.release();
mCamera = null;
e.printStackTrace();
}

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.startPreview();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(mCamera !=null)
{
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}

}
}


class GameView extends View {

public GameView(Context context) {
super(context);
}

public GameView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint p = new Paint();
p.setTextSize(100);
p.setColor(Color.CYAN);
canvas.drawText("AR",300,300,p);
}


}



public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);
}
}



마지막으로 mainactivity.xml layout을 만들자.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:id="@+id/button"/>

<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="6"
>

<myhome.artest.CameraView
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

</myhome.artest.CameraView>

<myhome.artest.GameView
android:layout_width="match_parent"
android:layout_height="wrap_content" />


</FrameLayout>


<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:id="@+id/button2"/>

</LinearLayout>

xml에서 중요한것은 FrameLayout안에 있는 CameraView와 GameView 의 순서를 바꿔서 입력하게 되면 GameView의 모습이 나오지 않게 됩니다.

그이유는 당연히 CameraView가 GameView를 덮어버리기 때문이죠!!