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);
}
}
댓글 없음:
댓글 쓰기