본문 바로가기

Program/Delphi-FireMonkey

[Delphi-FireMonkey] 안드로이드(Android) 리소스(Resource) 접근 및 이미지 적용

 이클립스에서 작업하는 안드로이드 프로젝트와는 달리 델파이-파이어몽키에서는 안드로이드 프로젝트의 리소스(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;

 

 더 쉽고 빠른 방법이 있을 것도 같은데... 음...