로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
심화

안드로이드 앱 프로그래밍

임시 이미지 정재곤
http://www.boostcourse.org/mo316/notice/2532
좋아요 1436 수강생 20099
아래의 글은 BOOSTER 서포터즈로 활동했던 케니(kart***)님이
작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
1)링크: https://blog.naver.com/kartmon/221598375334
2)작성날짜: 19/07/28
<본문내용>

1. 스크롤뷰 사용하기

1) 테이블 레이아웃

생각해보기

리니어 레이아웃 안에 리니어 레이아웃을 포함시키는 방식으로 격자 모양을 만들었을 때 테이블 레이아웃과 다른 점은 어떤 것이 있을까요?

- 비슷하게 사용 할 수 있지만, 테이블 레이아웃은 표처럼 일정하게 정렬되어 있는 것에 사용하기 편리 할 것이고, 리니어 레이아웃은 정렬되어있고 자유로운 위치를 만들때 사용할기 편리 할 것 같습니다.

2) 스크롤 뷰

생각해보기

이미지뷰에 큰 이미지를 넣어서 볼 때 위, 아래로 스크롤하는 것과 동시에 좌, 우 스크롤도 되게 하려면 어떻게 해야 할까요?

이렇게 하니까 적용이 되었습니다.

2. 이벤트 이해하기

1) 이벤트 처리 이해하기

대표적인 이벤트

-터치 이벤트(화면을 손가락으로 눌렀을때 발생하는 이벤트)

-키 이벤트(키패드나 하드웨어 버튼을 누를때 발생하는 이벤트)

- 제스처 이벤트(터치 이벤트 중에서 일정 패턴을 만들어 내는 이벤트)

-포커스

-화면 방향 변경

생각해보기

한 손가락으로 터치했을 때와 두 손가락으로 터치했을 때 소스 코드에서 구분하는 방법이 있을까요?

- MotionEvent 객체 안에 potintercount라는 함수를 사용하면 터치의 갯수를 가져올 수 있습니다.

단말의 방향이 세로 방향이었다가 가로 방향으로 바뀌었을 때 어떤 일이 벌어질까요?

- 전환하게 되면 match parent에 관련된 것들은 모두 가로의 방향으로 맞춰서 바뀌게 될것 같습니다.

어떤 경우에는 화면이 사라졌다가 다시 나타나는 것 같고 어떤 경우에는 똑같은 화면이 보이는 것 같은데

어떤 경우에 화면이 그대로 유지되는 걸까요?

- 질문을 이해하지 못했습니다 ㅜㅠ

화면이 없어졌다가 새로 만들어진다면 데이터는 유지되는 걸까요?

- 화면이 없어졌다가 새로 만들어지더라도 데이터가 뷰에서 저장되지 않고 외부에서 저장된다면 유지가 되지만 그렇지 않다면 유지되지 않을거라고 생각합니다.

3. 토스트와 대화상자

스낵바를 사용하기 위해서는 반드시 design 라이브러리를 추가해줘야한다.

1) 토스트 보여주기,2) 알림 대화상자 보여주기

생각해보기

토스트 메시지를 여러 번 띄울 때는 얼마만큼의 시간이 지연되어 보일까요?

이전에 띄웠던 메시지는 사라지고 새로운 토스트 메시지가 뜨게 되므로 제일 마지막 토스트의 지연시간만큼 보이게 됩니다.

알림 대화상자 외에 대화상자를 직접 만들어서 띄울 수도 있을까요?

아직 만드는 방법은 모르겠지만, 충분히 만들수 있을 거라고 생각합니다.

대화상자에서 사용자 입력을 받을 수 있도록 대화상자 안에 입력상자를 넣고 싶다면 어떻게 해야 할까요?

레이아웃을 새로 생성하여 입력상자가 있는 대화 상자를 만들면 될것 같습니다.

4. 비트맵 버튼 만들기

1) 나인패치 이미지

나인패치 - 이미지가 늘어나는 거나 왜곡되는 부분을 구분을 해서 처리를 할 수 있는 기능

나인패치 이미지 만드는 법

https://recipes4dev.tistory.com/132

안드로이드 나인 패치(9-Patch) 이미지 버튼 만들기. (How to make an Android Nine-Patch Image Button)

1. 나인 패치(9-Patch) 이미지. [안드로이드 나인 패치(9-Patch) 이미지 버튼]에서 나인 패치(9-Patch) 이미지의 개념과, 실제 그리기 과정에서 어떻게 동작하는지에 대해 설명하였습니다. 특히, 나인 패치(9-Patc..

recipes4dev.tistory.com

일반 이미지를 나인패치 이미지로 바꿀 수 있는 사이트

http://romannurik.github.io/AndroidAssetStudio/nine-patches.html#&sourceDensity=320&name=example

Android Asset Studio - Simple nine-patch generator

Edit mode Stretch region Content padding Optical bounds Drag or select a source graphic to get started. Auto-stretch Trim edge transparency Trim stretch region Matte Light Dark

romannurik.github.io

생각해보기

나인패치 이미지를 그래픽 프로그램을 이용해 직접 만들어볼 수도 있을까요?

안드로이드 스튜디오 내에서도 제공 되는 기능이기 때문에 이보다 정밀한 그래픽 프로그램에서는 가능하다고 생각합니다.(create 9 patch file)

2) 비트맵 버튼 만들기

버튼을 상속하여 필요하면 수정 가능한 다양한 기능을 만들 수 있다.

onDraw - 그리는 과정에서 추가적인 내용을 추가 가능할 수 있는 메소드

onMeasure - 크기를 결정할 수 있는 메소드

생각해보기

버튼의 배경 이미지가 바뀌는 기능을 좀 더 간단한 방법으로 만들 수는 없을까요?

위와 같이 상태 드로어블을 사용하면 됩니다.

만약 setBackground 함수만 호출하고 Invalidate메소드를 호출하지 않으면 어떤 일이 생길까요?

invalidate를 사용하지 않으면 버튼을 눌렀을때 발생하는 이벤트가 계속 유지됩니다.

5. 인플레이션 이해하기

1) 인플레이션 이해하기

setContentView - xml 레이아웃 파일을 메모리에 객체화 시킴(일부분 차지하는 레이아웃을 보여줄때는 사용 불가능)

LayoutInflater 를 이용하여 일부분을 차지하는 화면 구성요소를 보여줄수있다.

publicclassMainActivityextendsAppCompatActivity{ FrameLayout container; @Override protectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); container =(FrameLayout)findViewById(R.id.container);//레이아웃을 보여줄 부분 Button button =(Button)findViewById(R.id.button); button.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(View view){//인플레이션(버튼을 누를 경우 container에 레이아웃 화면 가져와서 보여줌 LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.sub1,container,true);}});}}
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.sub1,container,true);

생각해보기

XML 레이아웃에 LinearLayout 태그를 넣었을 때 이 객체에 새로 만든 XML 레이아웃을 적용하려면 어떻게 해야 할까요?

- 리니어 레이아웃에 프레임 레이아웃을 추가하고, 새로만든 xml 레이아웃을 mainActivity.java에서 인플레이션을 시키면 될것 같습니다.

LinearLayout을 상속해서 새로운 클래스를 정의하고 이 클래스에서 새로운 객체를 만들었다면 이 객체에 새로 만든 XML 레이아웃을 어떻게 적용할 수 있을까요?

새로 만든 객체를 호출해서 그 객체에 인플레이션을 하면 될것 같습니다.(사실 질문이 잘 이해안됨)

 


*********************************************