穿插一篇自定义view 的动画效果,偶然看到的一个gif刷新齿轮效果图片,原图如下:
感觉挺有意思的,就想自己也做一个,发费了一番功夫,算是做出了基本效果,但原谅我使其美观尽毁,做出的效果如下:
gif录制有些掉帧
好了,放源码了:
public class GearView extends View {
private Context context;
private Paint paint;
private float PI = 3.1415926f;
private int circleGrade = 1;//圆的齿轮个数 9+circleGrade 个
private float gearWidth = 40;
private float gearHeight = 50;
private float length = 60;//弧长
private List<Circle> circles;//存储圆的参数
private Map<Float, Bitmap> bitmaps;//把已经绘制好的bitmap存储起来,循环利用
private int speedArgu = 20;//旋转速度参数
private int viewWidth;//所在view 的宽度
private int viewHeight;//所在view 的高度
private boolean startRotato = true;//是否开始动画
private int r1;
private int r2;
private int r3;
private int r4;
private int r5;
private float fTran = 0;//平移基本数
private float translationArgu = 4.0f;//平移乘数
private float fRotate = 0;//平移后中心旋转基本数
private float transientRotate = 70.0f;//平移后中心旋转乘数
private float scale = 0.001f;//平移后中心缩放 程度
private float scaleBase = 1.0f;//平移后中心缩放基本数
public boolean isStartRotato() {
return startRotato;
}
public void setStartRotato(boolean startRotato) {
this.startRotato = startRotato;
}
public int getSpeedArgu() {
return speedArgu;
}
public void setSpeedArgu(int speedArgu) {
if(speedArgu > 70){
speedArgu = 70;
}
if(speedArgu < 5 && speedArgu > 0){
speedArgu = 5;
}
if(speedArgu < -70){
speedArgu = -70;
}
if(speedArgu <0 && speedArgu > -5){
speedArgu = -5;
}
this.speedArgu = speedArgu;
}
public GearView(Context context) {
super(context);
this.context = context;
init();
}
public GearView(Context context, AttributeSet attrs) {
super(context, attrs);
context = context;
init();
}
public GearView(Context context, AttributeSet attrs, int defStyleAt