상세 컨텐츠

본문 제목

[Android]비트맵 모형

Android 개발

by mobile 2013. 4. 16. 23:07

본문

반응형

안드로이드는 256 컬러를 지원하는 png 타입을 선호한다. 이유는 화면에 그릴때 가장 속도가 빠르기 때문이다.

비트맵 모형을 사용하는 방법은 안드로이드 내 'res/drawable/' 디렉터리 내에 이미지를 추가하고 XML 문서에서 '@[package:]drawable/some_file' 라고 지정하거나 자바 프로그램에서 다음과 같이 'R.drawable.some_file' 으로 지정하여 사용한다.

ImageView I = new ImageView().setImageResource(R.drawable.ic_launcher);

또는

Resources res = Context.getResources();

Drawable myImage = res.getDrawable(R.drawable.ic_launcher);


Resource 클래스는 다음과 같이 같이 애플리케이션 리소스에서 모형 객체를 읽거나 컬러와 같은 필요한 정보를 얻는데 사용한다. 리소스 클래스는 android.content.res 패키지에서 제공하며, android.content.Context 클래스내 getResources() 메서드를 사용하여 얻는다.

- public Drawable getDrawable(int id)

: /drawable 디렉터리내 모형을 얻는다.

- public int getColor(int id)

: /value 디렉터리내 컬러 모형을 얻는다.

- public DisplayMetrics getDisplayMetrics()

: 단말기가 제공하는 화면 해상도를 얻는다.

- public final AssetManager getAssets()

: Asset 디렉터리를 관리하는 AssetManager 객체를 얻는다.

- public Configuration getConfiguration()

: 단말기내 환경 설정 정보를 얻는다. 예를 들어 단말기가 쿼티 키보드를 제공하는지 아니면 터치 화면의 지원 여부 그리고 현재 단말기의 화면 방향 정보를 제공한다.


- android:src

: 비트맵 이미지 소스를 말한다.

- android:antialias

: 앤티얼라이스를 적용할 것인지 확인한다. true이면 적용을 의미한다.

- android:dither

: 디더링 효과를 적용할 것인지 확인한다.

- android:filter

: 이미지를 축소하거나 늘렸을 때 기본 이미지를 변환시켜 선명도를 높이는 필터링 효과를 적용할 것인지 확인한다.

- android:gravity

: 이미지의 위치를 나타낸다.

- android:tileMode

: 타일 모드를 나타낸다. 타일 모드를 적용하면 이미지의 위치를 나타내는 android:gravity 속성은 무시된다.

disabled : 타일 모드를 적용하지 않는다.

clamp : 이미지 밖의 영역은 경계 영역의 픽셀을 반복적으로 표현한다.

repeat : 이미지를 반복적으로 표현한다.

mirror : 이미지가 거울에 비친 것처럼 반복적으로 표현한다.


import android.app.Activity;

import android.content.Context;

import android.content.res.Resources;

import android.graphics.drawable.Drawable;

import android.os.Bundle;

import android.view.Gravity;

import android.view.Menu;

import android.view.View;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;


public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//setContentView(R.layout.activity_main);

this.setTitle(R.string.hello_world);

LinearLayout root = new LinearLayout(this);

root.setOrientation(LinearLayout.VERTICAL);

root.setGravity(Gravity.CENTER);

LinearLayout layout = new LinearLayout(this);

addResourceDrawable(layout, R.drawable.ic_launcher);

addResourceDrawable(layout, R.drawable.ic_launcher);

addResourceDrawable(layout, R.drawable.ic_launcher);

addLabelToRoot(root, "자체 고유한 크기의 비트맵 모형");

addChildToRoot(root, layout);

setContentView(root);

}


private void addLabelToRoot(LinearLayout root, String text) {

TextView label = new TextView(this);

label.setText(text);

root.addView(label, new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.MATCH_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT));

}


private void addChildToRoot(LinearLayout root, LinearLayout layout) {

root.addView(layout, new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.MATCH_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT));

}


private void addResourceDrawable(LinearLayout layout, int resource) {

View view = new View(this);

final Drawable d = getResources().getDrawable(resource);

view.setBackgroundDrawable(d);


view.setLayoutParams(new LinearLayout.LayoutParams(d

.getIntrinsicWidth(), d.getIntrinsicHeight()));

layout.addView(view);

}

}


비트맵 모형은 getResources() 메서드와 getDrawable() 메서드를 사용하여 읽는다. 그리고 setBackgroundDrawable() 메서드를 사용하여 뷰의 백그라운드 형태로 모형으로 화면에 출력한다. 위 2개의 메서드들은 public void getBackgroundResource(int resid)로 대처할 수 있음. getIntrinsicWidth() 메서드와 getIntrinsicHeight() 메서드는 모형이 갖고 있는 기본적인 너비와 높이를 제공한다. getTile() 메서드는 타이틀바내 제목을 표시하는 메서드이다.


Bitmap bitmap;

BitmapFactory.Options opts = new BitmapFactory.Options();

opts.inScaled = true;

opts.inDither = true;

bitmap = BitmapFactory.decodeResource(getResources(), id, opts);

final BitmapDrawable d = new BitmapDrawable(bitmap);


반응형

'Android 개발' 카테고리의 다른 글

[Android]상태 리스트 모형  (0) 2013.04.20
[Android]Shape 요소  (0) 2013.04.20
[Android]자동완성텍스트뷰  (0) 2013.04.08
[Android]그리드뷰  (0) 2013.04.07
[Android]스피너  (0) 2013.04.07

관련글 더보기

댓글 영역