Android UI:撒花动画

CoolAnimaions(一)

github

最近做一个喝水的项目,喝水达到目标量要一个酷炫的动画,看到有些app上有这个动画,模仿了一下。

RainView

rain_view.gif
  • 支持各种形状,多边形,星形
  • 自定义多边形,星型drawable
  • 可设置最多显示数量

思路就是通过召唤师控制下雨,召唤师有一个雨滴生成器召唤雨滴。各司其职,容易扩展。

关键类

召唤师ISummoner

public interface ISummoner {

    interface IRaindropCreator{
        void injectRaindrops(ISummoner summoner);
    }


    void initRaindrops(List list);

    List 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();

你可能感兴趣的:(Android UI:撒花动画)