이클립스에서 작업하는 안드로이드 프로젝트와는 달리 델파이-파이어몽키에서는 안드로이드 프로젝트의 리소스(Resource) 접근이 좀 번거롭다고 할 수 있을 것 같다.
이클립스에서 안드로이드 프로젝트로 작업을 할 경우 이미지 등의 파일들을 프로젝트의 정해진 폴더에 저장하면 안드로이드 프로젝트는 R.java 파일을 통해 리소스를 관리하고, 이 파일들에게 쉽게 접근하여 사용할 수 있게 해 준다. 문제는 델파이-파이어몽키에서는 이클립스에서처럼 쉽게 작업할 수가 없다는 것인데... 분명 방법이 있을 것도 같은데...
델파이 메뉴 Project-Deployment 를 열어 이미지를 올려놓고 Remote Path를 설정한다. 안드로이드에서는 기본적으로 이미지는 'res\drawable\' 경로를 기준으로 하고 있다. 파일 이름은 안드로이드 규약에 맞춰 소문자로 명명해야 한다.
이렇게 하면 프로젝트에서 내부적으로 리소스 관리가 되기는 하는 것 같은데 이클립스에서처럼 R.java 파일을 통해 쉽게 접근은 되지 않는다. 그래서 델파이-파이어몽키에서는 안드로이드의 Resources.class 에서 제공하는 'public int getIdentifier(String name, String defType, String defPackage)'을 이용하여 리소스(이미지뿐만 아니라 모든 리소스 파일)에 접근해야 한다.
먼저 uses절에 FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText,ndroidapi.Helpers, FMX.Surfaces, FMX.StdCtrls 을 추가.
그리고 Resources.class 에서 제공하는 'getIdentifier' 메소드를 이용하여 이미지에 접근한 뒤 BitmapFactory.class를 이용하여 이미지를 로드.
procedure TForm1.Button1Click(Sender: TObject);var testDrawable : JDrawable; testBitmapDrawable : JBitmapDrawable;
testJBitmap : JBitmap; testBitmapSurface : TBitmapSurface;
testResourceID : Integer;begin testResourceID := SharedActivityContext.getResources.getIdentifier(StringToJString('ic_test'), StringToJString('drawable'), SharedActivityContext.getPackageName);
testJBitmap := TJBitmapFactory.JavaClass.decodeResource(SharedActivity.getResources, testResourceID, nil);
testBitmapSurface := TBitmapSurface.Create;
JBitmapToSurface(testJBitmap, testBitmapSurface);
Image1.Bitmap.Assign(testBitmapSurface);end;
더 쉽고 빠른 방법이 있을 것도 같은데... 음...
'Program > Delphi-FireMonkey' 카테고리의 다른 글
[Delphi-FireMonkey] 안드로이드(Android) 뒤로가기 버튼 두번 눌러서 종료 (3) | 2015.02.24 |
---|---|
[Delphi-FireMonkey] 안드로이드(Android) Toast API 적용 (0) | 2015.02.17 |