2013년 7월 16일 화요일

[Android] Paint , Path , Drawable , LinearGradient 사용예제 와 뷰의 폭과 높이 확인 방법 과 색상 리소스 정의 방법

1.예제
android version = jelly bean
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Paint.Cap;
import android.graphics.Paint.Join;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RectShape;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;

public class CustomViewDrawables extends View {

 private ShapeDrawable upperDrawable;
 private ShapeDrawable lowerDrawable;

 public CustomViewDrawables(Context context) {
  super(context);

  // 윈도우 매니저를 이용해 뷰의 폭과 높이 확인
  // 뷰가 채워지는 화면의 크기를 알아오기 위해 시스템 서비스 객체인 WindowManager를 참조함
  WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
     Display display = manager.getDefaultDisplay();
     Point sizePoint = new Point();
     display.getSize(sizePoint);
     int width = sizePoint.x;
     int height = sizePoint.y;

  // 리소스에 정의된 색상값을 변수에 설정
  // 색상 정보는 xml 파일로 정의되며,[/res/values/]폴더 밑에 colors.xml이라는 이름으로 저장되어있다.
  // 안드로이드에서 색상을 만들어 사용하는 방법은 크게 자바 코드에서 사용하는 경우와 xml 리소스를 이용하는 경우로 나눌 수 있다.
  // 자바 코드에서는 Color 클래스에 정의된 상수 또는 Color.argb()메소드를 사용한다.
  Resources curRes = getResources();
  int blackColor = curRes.getColor(R.color.color01);
  int grayColor = curRes.getColor(R.color.color02);
  int darkGrayColor = curRes.getColor(R.color.color03);

  // upperDrawable 객체 생성
  upperDrawable = new ShapeDrawable();
  RectShape rectangle = new RectShape();
  rectangle.resize(width, height*2/3);
  upperDrawable.setShape(rectangle);
  upperDrawable.setBounds(0, 0, width, height*2/3);

  // 그라데이션 효과를 가지는 gradient객체 생성과 upperDrawable의 paint객체에 gradient객체를 shader로 설정
  LinearGradient gradient = new LinearGradient(0, 0, 0, height*2/3, grayColor, blackColor, TileMode.CLAMP);
  Paint paint = upperDrawable.getPaint();
  paint.setShader(gradient);

  // lowerDrawable 객체 생성
  lowerDrawable = new ShapeDrawable();
  RectShape rectangle2 = new RectShape();
  rectangle2.resize(width, height*1/3);
  lowerDrawable.setShape(rectangle2);
  lowerDrawable.setBounds(0, height*2/3, width, height);

  // 그라데이션 효과를 가지는 gradient 객체 생성과 lowerDrawable의 paint객체에 gradient객체를 shader로 설정
  LinearGradient gradient2 = new LinearGradient(0, 0, 0, height*1/3, blackColor, darkGrayColor, TileMode.CLAMP);
  Paint paint2 = lowerDrawable.getPaint();
  paint2.setShader(gradient2);

 }

 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);

  // 뷰 밑바탕이 되는 upperDrawable , upperDrawable 그리기
  upperDrawable.draw(canvas);
  upperDrawable.draw(canvas);

  // pathPaint 설정
  Paint pathPaint = new Paint();
  pathPaint.setAntiAlias(true);
  pathPaint.setColor(Color.YELLOW);
  pathPaint.setStyle(Style.STROKE);
  pathPaint.setStrokeWidth(16.0F);
  pathPaint.setStrokeCap(Cap.BUTT);
  pathPaint.setStrokeJoin(Join.MITER);

  // Path 설정
  Path path = new Path();
  path.moveTo(20, 20);
  path.lineTo(120, 20);
  path.lineTo(160, 90);
  path.lineTo(180, 80);
  path.lineTo(200, 120);

  // path 그리기
  canvas.drawPath(path, pathPaint);

  // pathPaint 설정
  pathPaint.setColor(Color.WHITE);
  pathPaint.setStrokeCap(Cap.ROUND);
  pathPaint.setStrokeJoin(Join.ROUND);

  // path 그리기
  path.offset(30, 120);
  canvas.drawPath(path, pathPaint);

  // pathPaint 설정
  pathPaint.setColor(Color.CYAN);
  pathPaint.setStrokeCap(Cap.SQUARE);
  pathPaint.setStrokeJoin(Join.BEVEL);

  // path 그리기
  path.offset(30, 120);
  canvas.drawPath(path, pathPaint);

 }

}

댓글 없음:

댓글 쓰기