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