1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android自定义控件时钟效果

Android自定义控件时钟效果

时间:2020-12-18 15:50:05

相关推荐

Android自定义控件时钟效果

时钟动图效果如下:

画图逻辑如下:

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

{

int widthMode = MeasureSpec.getMode(widthMeasureSpec);

int widthSize = MeasureSpec.getSize(widthMeasureSpec);

int heightMode = MeasureSpec.getMode(heightMeasureSpec);

int heightSize = MeasureSpec.getSize(heightMeasureSpec);

float hScale = 1.0f;

float vScale = 1.0f;

if (widthMode != MeasureSpec.UNSPECIFIED && widthSize < mDialWidth)

{

hScale = (float) widthSize / (float) mDialWidth;

}

if (heightMode != MeasureSpec.UNSPECIFIED && heightSize < mDialHeight)

{

vScale = (float) heightSize / (float) mDialHeight;

}

float scale = Math.min(hScale, vScale);

setMeasuredDimension(resolveSize((int) (mDialWidth * scale), widthMeasureSpec), resolveSize((int) (mDialHeight * scale), heightMeasureSpec));

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh)

{

super.onSizeChanged(w, h, oldw, oldh);

mChanged = true;

}

@Override

protected void onDraw(Canvas canvas)

{

super.onDraw(canvas);

boolean changed = mChanged;

if (changed)

{

mChanged = false;

}

int availableWidth = getWidth();

int availableHeight = getHeight();

int x = availableWidth / 2;

int y = availableHeight / 2;

final Drawable dial = mDial;

int w = dial.getIntrinsicWidth();

int h = dial.getIntrinsicHeight();

boolean scaled = false;

if (availableWidth < w || availableHeight < h)

{

scaled = true;

float scale = Math.min((float) availableWidth / (float) w, (float) availableHeight / (float) h);

canvas.save();

canvas.scale(scale, scale, x, y);

}

if (changed)

{

dial.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));

}

dial.draw(canvas);

canvas.save();

canvas.rotate(mHour / 12.0f * 360.0f, x, y);

final Drawable hourHand = mHourHand;

if (changed)

{

w = hourHand.getIntrinsicWidth();

h = hourHand.getIntrinsicHeight();

hourHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));

}

hourHand.draw(canvas);

canvas.restore();

canvas.save();

canvas.rotate(mMinutes / 60.0f * 360.0f, x, y);

final Drawable minuteHand = mMinuteHand;

if (changed)

{

w = minuteHand.getIntrinsicWidth();

h = minuteHand.getIntrinsicHeight();

minuteHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));

}

minuteHand.draw(canvas);

canvas.restore();

//add second draw

canvas.save();

canvas.rotate(mSeconds / 60.0f * 360.0f, x, y);

final Drawable secondHand = mSecondHand;

if (changed)

{

w = secondHand.getIntrinsicWidth();

h = secondHand.getIntrinsicHeight();

secondHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));

}

secondHand.draw(canvas);

canvas.restore();

if (scaled)

{

canvas.restore();

}

}

完整图片以及代码下载地址 : /download/u012539700/10289194

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。