Android UI:撒花動畫
CoolAnimaions(一)
ofollow,noindex">github
最近做一個喝水的專案,喝水達到目標量要一個酷炫的動畫,看到有些app上有這個動畫,模仿了一下。
RainView

rain_view.gif
- 支援各種形狀,多邊形,星形
- 自定義多邊形,星型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();