/**
* 当前圆盘所转的弧度(以该 view 的中心为圆点)
*/
float deta_degree;
然后用Matrix来控制旋转图片,主要是preRotate(deta_degree)这里的单位是度,360度为一圈,最后把旋转的图画到
画布上
@Override
protected void onDraw(Canvas canvas) {
Matrix matrix = new Matrix();
// 设置转轴位置
matrix.setTranslate((float)width / 2, (float)height / 2);
// 开始转
matrix.preRotate(deta_degree);
// 转轴还原
matrix.preTranslate(-(float)width / 2, -(float)height / 2);
// 将位置送到view的中心
matrix.postTranslate((float)(maxwidth - width) / 2, (float)(maxwidth - height) / 2);
canvas.drawBitmap(rotatBitmap, matrix,paint);
super.onDraw(canvas);
}
考虑到它的周期为360,如果detaDegree的度数太大可能会越界,我们可以做一个于求余处理,让它的值在-360到360
之间
/**
* 通过此方法来控制旋转度数,如果超过360,让它求余,防止,该值过大造成越界
*
* @param added
*/
private void addDegree(float added) {
deta_degree += added;
if (deta_degree > 360 || deta_degree < -360) {
deta_degree = deta_degree % 360;
}
}
这里的动画是通过不停的走ondraw()方法刷新,产生的效果,类似放电影一样
d.view的手势响应
当用户触摸它时会响应onTouch事件,在onTouch里分析手指的坐标,通过坐标算出与圆心的夹角
下图为手指与view中心的夹角(这里的原点就是view的旋转中心):
每次手指滑动或是松开都会计算它与原点的夹角,这个方法可以通过反正切函数求出来,详情: