안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요
근래 열심히 안드로이드를 배우고 있는 학생입니다.
제가 질문을 드리는 것은 다름이 아니라,
한 액티비티 내에 위에는 버튼 네 개를 배치하고
아래에는 버튼에 반응해서 움직이는 도형을 만들고 싶어서 입니다.
생각하기로는
<리니어 액티비티>
<택스트 뷰>
<앱솔루트 액티비티>
<버튼1>
<버튼2>
<버튼2>
<버튼2>
<캔버스를 올릴 공간>
</앱솔루트 액티비티>
</리니어 액티비티>
이런 구성을 생각하고 있습니다.
화면에 뿌리면 아래와 같습니다.
[ 택스트뷰 ]
[버튼1] [버튼1] [버튼1] [버튼1]
[ ]
[ ]
[ ]
[ 도형이 움직일 공간 ]
[ ]
[ ]
[ ]
이런 구상을 하고 있습니다.
제가 하고 싶은 것은 커스텀 뷰를 앱솔루트 레이아웃 하단에 배치 시키고
그 영역에서 도형을 움직이고 싶은데 이 부분을 어떻게 해야 할 지 모르겠습니다.
지금 공부하고 있는 책은, "안드로이드 프로그래밍 정복"으로
이 책에서도 커스텀 뷰를 만들어 도형을 움직이는 내용이 있긴 하다만,
public class CustomView extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyView vm = new MyView(this);
setContentView(vm);
}
protected class MyView extends View{
public MyView(Context context){
super(context);
}
public void onDraw(Canvas canvas){
Paint pnt = new Paint();
pnt.setColor(0xff00ff00);
//canvas.drawColor(0xffffffff);
canvas.drawCircle(100, 100, 80, pnt);
}
}
}
커스텀 뷰 하나가 액티비티 하나를 모두 차지하는 것 같습니다.
한 액티비티 내에 버튼 뷰와 커스텀뷰를 함께 배치하고
그 커스텀 뷰 내에서 도형을 그리고 움직이기 위해서는 어떻게 해야 하는지 궁금합니다.
질문이 많이 두서 없어서 죄송합니다.
아직 배우고 있는 입장이라;;;;
고수님들의 답변을 부탁드립니다.
근래 열심히 안드로이드를 배우고 있는 학생입니다.
제가 질문을 드리는 것은 다름이 아니라,
한 액티비티 내에 위에는 버튼 네 개를 배치하고
아래에는 버튼에 반응해서 움직이는 도형을 만들고 싶어서 입니다.
생각하기로는
<리니어 액티비티>
<택스트 뷰>
<앱솔루트 액티비티>
<버튼1>
<버튼2>
<버튼2>
<버튼2>
<캔버스를 올릴 공간>
</앱솔루트 액티비티>
</리니어 액티비티>
이런 구성을 생각하고 있습니다.
화면에 뿌리면 아래와 같습니다.
[ 택스트뷰 ]
[버튼1] [버튼1] [버튼1] [버튼1]
[ ]
[ ]
[ ]
[ 도형이 움직일 공간 ]
[ ]
[ ]
[ ]
이런 구상을 하고 있습니다.
제가 하고 싶은 것은 커스텀 뷰를 앱솔루트 레이아웃 하단에 배치 시키고
그 영역에서 도형을 움직이고 싶은데 이 부분을 어떻게 해야 할 지 모르겠습니다.
지금 공부하고 있는 책은, "안드로이드 프로그래밍 정복"으로
이 책에서도 커스텀 뷰를 만들어 도형을 움직이는 내용이 있긴 하다만,
public class CustomView extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyView vm = new MyView(this);
setContentView(vm);
}
protected class MyView extends View{
public MyView(Context context){
super(context);
}
public void onDraw(Canvas canvas){
Paint pnt = new Paint();
pnt.setColor(0xff00ff00);
//canvas.drawColor(0xffffffff);
canvas.drawCircle(100, 100, 80, pnt);
}
}
}
커스텀 뷰 하나가 액티비티 하나를 모두 차지하는 것 같습니다.
한 액티비티 내에 버튼 뷰와 커스텀뷰를 함께 배치하고
그 커스텀 뷰 내에서 도형을 그리고 움직이기 위해서는 어떻게 해야 하는지 궁금합니다.
질문이 많이 두서 없어서 죄송합니다.
아직 배우고 있는 입장이라;;;;
고수님들의 답변을 부탁드립니다.
2010.09.10 00:37:27
스텐리스85님이 말씀하신 내용은 좀 부차적인거구요...
일단 모 서적에 나온 View를 내가 원하는 영역만 채웠으면 하는게 첫번째일건데요.....
xml활용을 위해서는 생성자부터 Context와 AttributeSet을 받는 생성자가 필요합니다.
위의 생성자가 있다면 XML로 내가 원하는 뷰를 배치할수 있습니다.
그렇게되면 원하는 곳에 원하는 크기의 뷰가 들어가겠죠...
모 서적에 있는 내용을 그대로 쓰시려면 위의 생성자만 잘 정의하셔도 될거구요....
만약 더 좋은 동작등을 원하신다면 스텐리스85님의 내용을 참고하셔서 공부하시면 될겁니다.
일단 모 서적에 나온 View를 내가 원하는 영역만 채웠으면 하는게 첫번째일건데요.....
xml활용을 위해서는 생성자부터 Context와 AttributeSet을 받는 생성자가 필요합니다.
위의 생성자가 있다면 XML로 내가 원하는 뷰를 배치할수 있습니다.
그렇게되면 원하는 곳에 원하는 크기의 뷰가 들어가겠죠...
모 서적에 있는 내용을 그대로 쓰시려면 위의 생성자만 잘 정의하셔도 될거구요....
만약 더 좋은 동작등을 원하신다면 스텐리스85님의 내용을 참고하셔서 공부하시면 될겁니다.
몇줄로 설명할 수 있을지 모르겠네요 -0-; 도형을 그리기 위해서 onDraw 구현하셨고 잘 하셨어요. 예를 들어 화면의 임의의 점을 터치하고 이 부분으로 도형이 이동하는것을 표현하고 싶으시다면,
drawCircle에서 좌표값을 계속 변화시켜 줘야 합니다. 변화시키는 동시에 onDraw를 반복해서 호출하시면
화면이 다시 그려지면서 도형이 움직이는 것 처럼 보이지요..
1.간단하게(?) 하자면.. ScreenBuffer를 구현해야 합니다. 스크린 버퍼는 쓰레드로 구현하구요. 스크린 버퍼에서는 반복적으로 onDraw를 호출해 줍니다.
2. 도형이 한 좌표값으로 움직이려면(직선으로) 알고리즘이 필요하겠죠? 브레젠함 알고리즘 찾아 보세요. 모든 게임에서 직선이동의 기본입니다.
이정도만 해도 꽤 많은 내용을 다루네요..