2013년 1월 30일 수요일

[Android] 사용자 모형 Java Code로 만들기


Java Code로 모형 만드는 방법은 크게 4가지가 있다.
  • 직사각형은 RectShape Class로 생성한다.
  • 타원은 OvalShape Class로 생성한다.
  • 모서리가 둥근 사각형은 RoundRectShape 클래스로 생성한다.
  • 다각형은 Path Class 로 생성하여 점과 점사이를 연결하는 방식으로 만든다.

사각형
private void rectShape() {
 ShapeDrawable drawable = new ShapeDrawable(new RectShape());
 drawable.setIntrinsicWidth(200);
 drawable.setIntrinsicHeight(100);
 drawable.getPaint().setColor(Color.BLUE);
 ImageView ivRect = (ImageView) findViewById(R.id.imageView1);
 ivRect.setImageDrawable(drawable);
}
  • setIntrinsicHeight(int height), setIntrinsicWidth (int width) method는 모형의 높이와 너비를 나타낸다.
  • getPaint() method는 색상이나 문자, 비트맵의 이미지를 넣을 수 있는 Paint객체를 반환한다.

타원
private void ovalShape() {
 ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
 drawable.setIntrinsicWidth(200);
 drawable.setIntrinsicHeight(100);
 drawable.getPaint().setColor(Color.RED);
 ImageView ivOval = (ImageView) findViewById(R.id.imageView2);
 ivOval.setImageDrawable(drawable);
}

라운드 모서리 사각형
private void roundRectShape() {
 float[] outerR = new float[] { 12, 12, 12, 12, 0, 0, 0, 0 };
 RectF inset = new RectF(6, 6, 6, 6);
 float[] innerR = new float[] { 12, 12, 0, 0, 12, 12, 0, 0 };
 ShapeDrawable drawable = new ShapeDrawable(new RoundRectShape(outerR,inset, innerR));
 drawable.setIntrinsicWidth(200);
 drawable.setIntrinsicHeight(100);
 drawable.getPaint().setShader(new LinearGradient(0, 0, 50, 50, new int[] {0xFFFF0000, 0XFF00FF00, 0XFF0000FF }, null,Shader.TileMode.REPEAT));
 ImageView ivRoundRect = (ImageView) findViewById(R.id.imageView3);
 ivRoundRect.setImageDrawable(drawable);
}
  • public RoundRectShape(float[] outerRadii, RectF inset, float[] innerRadii) 생성자는 라운드된 사각형을 그린다. 
    • outerRadii는 두 개의 실수 배열을 쌍으로 외부 사각형의 모서리 라운드 형태를 구성한다. 처음 왼쪽 위으 모서를 시작하여 시계방향으로 모서리의 각을 정의한다.
    • inset는 외부와 내부 라운드된 사각형간의 거리이다.
    • innerRadii는 두개를 쌍으로 내부 사각형의 모서리 라운드를 구성한다.
  • public Shader setShader(Shader shader)는 색상을 입히는 기능을 한다. 하위 클래스는 BitmapShader, ComposeShader, LinearGradient, RadialGradient, SweepGradient와 같은 클래스들이 있다.
  • public LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile )
    • 선형 색상 바르기 객체를 생성한다.
    • x0, y0 는 x축과 y축의 색상 바르기 시작점을 나타낸다.
    • x1, y1 는 색상 바르기 종착점을 나타낸다.
    • tile은 이미지의 타일 모드를 나타낸다.
  • public RadialGradient(float x, float y, float radius, int[] colors, float[]positions, Shader.TileMode tile)
    • 방사형 색상 바르기 객체를 생성한다.
    • x,y는 방사형 중심으로 색상 바르기를 나타낸다.
    • radius는 반지름을 나타낸다.
    • tile은 이미지의 타일 모드를 나타낸다.
  • public SweepGradient (float cx, float cy, int[] colors, float[] positions)
    • 쓸어내기 효과를 나타낸다.
    • cx와 cy는 쓸어내기의 중심을 나타낸다.

마름모 모형
private void pathShape() {
 Path path = new Path();
 path.moveTo(50, 0);
 path.lineTo(0, 50);
 path.lineTo(50, 100);
 path.lineTo(100, 50);
 path.close();

 ShapeDrawable drawable = new ShapeDrawable(new PathShape(path, 100, 100));
 drawable.setIntrinsicWidth(200);
 drawable.setIntrinsicHeight(100);

 int[] pixels = new int[] { 0xFFFF0000, 0xFF00FF00, 0XFF0000FF, 0 };
 Bitmap bm = Bitmap.createBitmap(pixels, 2, 2, Bitmap.Config.ARGB_8888);
 drawable.getPaint().setShader(new BitmapShader(bm, Shader.TileMode.REPEAT,Shader.TileMode.REPEAT));

 ImageView ivPath = (ImageView) findViewById(R.id.imageView4);
 ivPath.setImageDrawable(drawable);
}
  • moveTo(float x, float y) method는 다각형응ㄹ 그릴 최초 위치로 이동한다.
    • x와 y는 상대적인 위치로 화면의 위치와는 무관하다.
  • lineTo(float x, float y) method는 마지막 위치로부터 상대적인 위치의 좌표축으로 라인을 그린다.
  • public static Bitmap createBitmap(int[] colors, int width, int height, Bitmap.Config config) method는 주어진 색상을 사용하여 너비와 높이를 비트맵으로 만든다.
  • public BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY) method는 비트맵을 사용하여 색상 바르기를 위한 세이더 객체를 생성한다.


관련글



댓글 없음:

댓글 쓰기