Canvas其实在前面的几篇博客中都有过使用,但这些使用一般集中在绘制和画布变化方面,画布的快照和裁剪应用很少。下面通过一个沙漏实例演示下这两部分的使用
效果图:
说是沙漏确实有点勉强.没有美工支持,只好从老项目里扒出来两张不同颜色填充的颜色来应付。重在实现过程,希望有强迫症的同学能够理解一下哈。
主要实现过程分为两部分
1. 自定义一个Drawable,实现两张图片的拼接。
2. 利用属性动画更新Drawable的level。
自定义Drawable
这部分不仅需要Canvas的相关知识,还需要对Drawable有一定的了解。合理利用Drawable的level属性,监听其值变化进行重绘。
Canvas的相关操作
@Override
public void draw(Canvas canvas) {
//获得level
mCurrentLevel = getLevel();
//level为0设置画未选择图片
if (0 == mCurrentLevel) {
mUnselectedDrawable.draw(canvas);
} else if (10000 == mCurrentLevel) {
//level为最大值则显示选择图片
mSelectedDrawable.draw(canvas);
} else {
/* 根据level大小对画布进行裁剪,设置不同图片*/
//获得画布的上半部分
Gravity.apply(Gravity.TOP, mBounds.width(), (int) (mBounds.height() * (mCurrentLevel / (<