Android UI:撒花動畫 CoolAnimaions(一)

CoolAnimaions(一)

github

最近做一個喝水的項目,喝水達到目標量要一個酷炫的動畫,看到有些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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章