안녕하세요 돼지왕 왕돼지입니다.
오늘은 Custom view 를 만드느 방법을 알아보기 위해, Rainbow progress bar sample code 를 함께 보겠습니다.
Rainbow Progress Bar 는 김상형씨의 "안드로이드 프로그래밍 정복" 에서 발췌했습니다.
2012/02/25 - [리뷰 놀이터/책] - [책 리뷰/추천] 안드로이드 프로그래밍 정복 - 김상형
// 세로 프로그래스 바.
class Rainbow extends View{
int mMax;
int mPos;
int mProgHeight;
LinearGradient mShader;
public Rainbow(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
init();
}
public Rainbow(Context context, AttributeSet attrs){
super(context, attrs);
init();
}
public Rainbow(Context context){
super(context);
init();
}
void init(){
mMax = 100;
mPos = 0;
}
void setMax(int aMax){
if (aMax > 0){
mMax = aMax;
invalidate();
}
}
int getMax() { return mMax; }
void setPos(int aPos){
if (aPos < 0 || aPos > mMax){ return; }
mPos = aPos;
invalidate();
}
int getPos(){ return mPos; }
protected void onDraw(Canvas canvas){
if (mShader == null){
mProgHeight = getHeight() - getPaddingTop() - getPaddingBottom();
int[] colors = {Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE};
mShader = new LinearGradient(0, 0, 0, mProgHeight, colors, null, TileMode.CLAMP);
}
// 프로그래스 바의 status가 차지하는 영역
RectF rt = new RectF();
rt.left = getPaddingLeft();
rt.rgiht = getWidth() - getPaddingRight();
rt.bottom = getPaddingTop() + mProgHeight;
rt.top = rt.bottom - mProgHeight * mPos / mMax;
Paint fillpnt = new Paint();
fillpnt.setShader(mShader);
canvas.drawRect(rt, fillpnt);
// 테두리
rt.top = getPaddingTop();
Paint outpnt = new Paint();
outpnt.setColor(Color.WHITE);
outpnt.setStyle(Paint.Style.STROKE);
canvas.drawRect(rt, outpnt);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int Width = 26, Height = 100;
switch (MeasureSpec.getMode(widthMeasureSpec)){
case MeasureSpec.AT_MOST:
Width = Math.min(MeasureSpec.getSize(widthMeasureSpec), Width);
break;
case MeasureSpec.EXACTLY:
Width = MeasureSpec.getSize(widthMeasureSpec);
break;
}
// same for the horizontal
setMeasuredDimension(Width, Height);
}
}
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] 프로를 위한 팁 ( ProTip ) - 부제 : Featured App 만들기 (0) | 2012.03.07 |
---|---|
[Android/안드로이드] Memory Management For Android. (8) | 2012.03.07 |
[Android/안드로이드] Custom View ( 커스텀 뷰 ) 만드는 방법. (0) | 2012.02.28 |
[Android/안드로이드] Gallery ( 갤러리 ) sample code. (0) | 2012.02.28 |
[Android/안드로이드] GridView ( 그리드 뷰 ) with sample code. (0) | 2012.02.28 |
댓글