2학년 2학기/모바일프로그래밍

10주차

밍이라구 2023. 12. 4. 19:07

*안드로이드가 데이터를 저장하는 4가지 방법

-shared perference(키 -값 쌍으로 저장 (액티비티 간 공유 가능)) -몇 개 안되는 데이터를 이용할때 사용

-File(내부에 저장 , 외부에 저장)

-SQLite(데이터베이스에 저장)

-Network(네트워크 서버에 저장)

4가지 모두 File 로 정의가 가능함,ㅋㅋ

 

*공유 환경설정( shared perference)-> XML 형태 저장

-데이터를 키-값 쌍으로 저장하고 다시 불러와 복원 할 수 있는 방법.

-저장한 데이터는 사용자 앱이 종료되어도 유지됨.

-활용 : 화면 전환 시 데이터 저장 및 로드를 위한 임시 저장에 활용

 

 

*내장 메모리 파일 처리

-내장 메모리의 저장 위치 : /data/data/패키지명/files 폴더

1.openFileOutput().openFileput()으로 파일열기

2.read() 또는 write() 으로 파일 읽기/쓰기

3.close()으로 파일 닫기

-가장 간단한 파일 생성 예시

FILE inFile = new FILE(context.getFilesDir(),"fileName");

-퍼미션 주의!!!!!

android.permission.WRITE_EXTERNAL_STORAGE

=> 파일을 읽고 쓰는데 제한이 있음. -> 제한된 폴더나 SD카드 -> 권한 설정 확인 필요.

 

*raw 폴더 파일 처리

-프로젝트의 /res/raw 폴더에 필요한 파일을 저장해서 사용

-openRawResource()메소드를 사용해서 접근

-프로젝트의 /res/raw는 프로젝트에 포함된 폴더이므로 읽기 전용만 가능

 

-raw 폴더 생성

*raw 폴더 파일 처리

-raw _ test.txt 파일 추가(파일 저장시 인코딩을 UTF-8로 선택하여 저장

직접 생성해서 복사로 추가하거나 소스 다운로드해서 08장의 사용그림 폴더에서 복사해 추가함.

.

*SD카드에서 파일 읽기( 버전에 따라 다르기에 확인 필요)

-테스트용 파일 (sd_text.txt)을 sdcard에 push하자

-androidManifest.xml 파일에 sd카드를 사용 할 수 있도록 퍼미션 지정!!

★sdcard 폴더 또는 /storage/emulated/0폴더에 upolad

★11버전에서 설정 방법 

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

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

 

-퍼미션, 파일 경로명(/storage/emulated/0/Download/sd_test.txt) 주의

-11버전에서 APP퍼미션 설정 확인 

 

*SD카드에 폴더 및 파일 생성하기

-Environment 클래스의 정적 메소드를 이용해 경로명을 구함.

 (옛날 방식임.)

예시로 >>

final String strSDpath = Environment.getExternalStorageDirectory()

             .getAbsolutepath();

final File mtDir = new File(strSDpath + "/mydir"); 를 이용해 파일을 찾음

 

만들때는 mkdir();  //  지울땐 delete();

 

*특정 폴더의 하위 폴더 및 파일 목록

-File.listFiles()를 이용하여 지정한 폴더의 하위 폴더 및 파일 목록 파악

 

*커스텀 뷰 만들기 정리

-(1) 새로운 클래스를 만들고 뷰를 상속받는다

public class myPictureView extends View

-(2) onDraw() 메소드 내에 출력할 코드를 작성한다.

protected void onDraw(Canvas canvas){

        super.onDraw(canvas);

        .....

}       => 다시 그리기 invalidate()->onDraw()호출

 

-(3) 새로 만든 뷰를 메인 액티비티에 추가한다.

<com.cokkandroid.project8_2.myPictureView

       android:id="@+id/myPictureView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

// <com.cokkandroid.project8_2    이 부분은 본인의 패키지 이름으로 설정할 것.

 

간단한 이미지 뷰어 만들기

- myPictureView 커스텀 위젯 만들어 activity_main.xml에 넣어 사용

 

**그래픽의 기초

*그래픽을 그리기 위해 필요한 주요 클래스

-캔버스(canvas) : 도화지 같은 개념으로 뷰에 그릴 수 있도록 지원

- 페인트 (paint) : 붓 같은 개념으로 그리기에 필요한 색상 등 지원

*그래픽을 표현할 때는 View클래스를 재정의하는 형태를 많이 사용(아래 사진 참고)

 

*단축키 하나 추가요

-method override 하려면 "ctrl + O "

 

*캔버스 클래스 메소드

-점 그리기 => void drawPoint(float x, float y, paint paint)

-선 그리기 => void drawLine(float startX, float startY, float stopX, float stopY, Paint paint)

-사각형 그리기 => void drawRect(float left, float top, float right, float bottom, Paint paint)

-둥근 모서리 사각형 그리기 => void drawRoundRect(

-원 그리기 => void drawCircle(float cx, float cy, float radius, Paint paint)

-타원 그리기 => void drawOval(RectF oval, Paint paint)

 

* 캔버스 클래스 메소드

-아크 그리기 => void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

-패스 그리기 => void drawPath( Path path, Paint paint)

-비트맵 그리기 => void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)

 

*선 그리기 속성

- setStrokeWidth : 선 두께 설정

-setStrokeCap : 선 시작과 끝 부분의 모양 설정

-setStrokeJoin : 선 연결 모양(직각, 둥근 등) 설정

 

*그래픽 처리 기본

-onDraw 메소드 오버라이딩 사용

 

*터치 이벤트( 뷰를 터치하면 발생)

-터치를 구현하려면 view 클래스의 onTouchEvent() 메소드 오버라이

event.getAction()으로 터치한 동작을 얻음.

ex >>

@override 

public boolean onTouchEvent(MotionEvent event){

swich (event.getAction()){

case MotionEvent.ACTION_DOWN //손가락으로 화면을 누르기 시작했을 때 할일

break;

case MotionEvent.ACTION_MOVE: // 터치 후 손가락을 움직일 때 할 일

break;

case MotionEvent.ACTION_UP: // 손가락을 화면에서 뗄 때 할 일

break;

case MotionEvent.ACTION_CANCLE: // 터치가 취소 될 때 할 일

break;

default:

break;

}

return true;

}

** 전에 사용하던 소스와 비교 방법 : Compare With메뉴 사용

- (1) 소스에서 우측 마우스 클릭 Compare With선택 > 비교할 대상 선택 > 코드 비교

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'2학년 2학기 > 모바일프로그래밍' 카테고리의 다른 글

14주차  (0) 2023.12.04
13주차  (0) 2023.12.04
12주차  (0) 2023.12.04
11주차  (0) 2023.12.04
9주차  (0) 2023.12.04