一个酷炫动画的下拉刷新

一般我们要写一个下拉刷新需要一个新的layout布局 同时还要控制onTouch事件以及header的显示,这样即使布局做得好,也要200行代码,并且没有什么动画效果,比较难看。这个circleLayout只用了300行代码,(如果考虑复用动画类的话应该可以减少到200行),实现了整个刷新动画,并且暴露刷新接口,使用时在Activity中就能获取到事件。
部分重要代码:

public interface OnFreshListener{
public void startFresh();
}
public void setOnFreshListener (OnFreshListener listener){
this.freshListener = listener;
}
public void onFreshFinish(){
isFreshing = false;
isRunning = false;
startDropAnimation();
Toast.makeText(getContext(),”刷新完成”,Toast.LENGTH_LONG).show();
}

public void doShadow(float distance, float x){
if(!isFreshing) {
paint.setColor(Color.BLACK);
lastDistance = distance;
lastX = x;
float per = distance / 400;
if (per > 1) per = 1;
rect.top = -60 + titleHeight;
rect.bottom = per * 0.9f * 100 + titleHeight;
rect.right = width + x;
rect.left = x – width;
postInvalidate();
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawOval(rect, paint);
if(ba.isShow){
canvas.drawCircle(ba.x ,ba.y ,ba.size ,ball);
arcr.top = (int)(ba.y – ba.size -ba.arcSize – 8);
arcr.bottom = (int)(ba.y + ba.size + ba.arcSize + 8);
arcr.left = (int)(ba.x – ba.size – ba.arcSize – 8);
arcr.right = (int)(ba.x + ba.size +ba.arcSize + 8);
canvas.drawArc(arcr ,ba.arcStart ,ba.arc ,false ,arcP);
}
}
主要代码:/uiTest/app/src/main/java/tecotaku/cn/myapplication/MyShadow.java
项目地址:https://github.com/SinoReimu/uiTest
activity入口:MainActivity 右上角的Float Action Button

分类: java/android技术

发表评论

电子邮件地址不会被公开。