你好,我正在尝试在 android 中每隔 5 秒对视图的高度进行动画处理:-
- 高度从 0 到 5
- 高度从 5 变为 10
- 高度从 10 变为 3 等
我正在使用下面的代码:-
public class ShowAnimation extends Animation{
float finalHeight;
View imageview;
public ShowAnimation(View view,float deltaheight){
this.imageview=view;
this.finalHeight=deltaheight;
}
protected void applyTransformation(float interpolatedtime,Transformation t){
imageview.getLayoutParams().height=(int)(finalHeight*interpolatedtime);
imageview.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
public boolean willChangeBounds() {
return true;
}
}
并像这样初始化它:-
Animation anidelta = new ShowAnimation(delta, deltaheight);
anidelta.setDuration(500/* animation time */);
delta.startAnimation(anidelta);
但这样我得到以下信息:-
- 高度从 0 到 5
- 高度从 0 到 10
- 高度从 0 变为 3
我希望高度从之前的高度开始动画化,而不是每次都从 0 开始。
有人可以帮我吗
编辑1:-
我做了这个
Animation anidelta = new ShowAnimation(delta, deltaheight);
anidelta.setDuration(500/* animation time */);
anidelta.setFillAfter(true);
delta.startAnimation(anidelta);
但它仍然从 0 动画到新高度。
好吧,这就是我最终解决它的方法:-
public class ResizeAnimation extends Animation
{
View view;
int startH;
int endH;
int diff;
public ResizeAnimation(View v, int newh)
{
view = v;
startH = v.getLayoutParams().height;
endH = newh;
diff = endH - startH;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
view.getLayoutParams().height = startH + (int)(diff*interpolatedTime);
view.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight)
{
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
public boolean willChangeBounds()
{
return true;
}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)