Android UI:撒花动画
2018-12-03 本文已影响0人
徐影魔
CoolAnimaions(一)
最近做一个喝水的项目,喝水达到目标量要一个酷炫的动画,看到有些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();