CoolAnimaions(一)
最近做一個喝水的項目,喝水達到目標量要一個酷炫的動畫,看到有些app上有這個動畫,模仿了一下。
RainView
- 支持各種形狀,多邊形,星形
- 自定義多邊形,星型drawable
- 可設置最多顯示數量
思路就是通過召喚師控制下雨,召喚師有一個雨滴生成器召喚雨滴。各司其職,容易擴展。
關鍵類
召喚師ISummoner
public interface ISummoner {
interface IRaindropCreator{
void injectRaindrops(ISummoner summoner);
}
void initRaindrops(List<IRainDrop> list);
List<IRainDrop> getRaindrops();
/**
* start to rain
*/
void fall();
/**
* stop the rain
*/
void stop();
void deployRaindrops();
boolean shouldAbandon(IRainDrop rainDrop);
void setRaindropCreator(IRaindropCreator raindropCreator);
void setMaxRaindropCount(int maxRaindropCount);
int getMaxRaindropCount();
}
雨滴元素IRainDrop
public interface IRainDrop {
void setInitPosition(PointF pointF);
PointF getInitPosition();
void setRaindropWidth(int width);
int getRaindropWidth();
void setRaindropHeight(int height);
int getRaindropHeight();
void setCurrentX(float x);
float getCurrentX();
void setCurrentY(float y);
float getCurrentY();
float getRaindropRotation();
void setRaindropRotation(float rotation);
float getRaindropRotationSpeed();
void setRaindropRotationSpeed(float speed);
void setSpeedX(float speedX);
float getSpeedX();
void setSpeedY(float speedY);
float getSpeedY();
/**
* move to position
*/
void moveTo(float x,float y);
void draw(Canvas canvas);
boolean isLoop();
void setLoop(boolean loop);
}
示例用法
mRainView = findViewById(R.id.rain_view);
mRainView.setMaxRaindropCount(25);
mRainView.setRaindropCreator(new RaindropCreator());
mRainView.fall();