我有一个ListVIEw,其项目需要与动画折叠,然后删除.我使用动画来折叠项目,在完成折叠后,我从ListVIEw中删除项目(通过从数据列表中删除它并调用notifyDataSetChanged).要检测动画是否完成,请检查applytransformation方法中的interpolatedTime == 1.0.问题是applytransformation被`interpolatedTime’== 1调用两次,所以我不能真正依赖它(否则我可以删除两个项而不是一个).为什么会这样?这是我的一些代码:
public static voID collapseAndDelete(final VIEw v, final ArrayList<AlarmClock> alarmClockArrayList, final AlarmsArrayAdapter adapter, final int position) { final int initialHeight = v.getMeasuredHeight(); Animation a = new Animation() { @OverrIDe protected voID applytransformation(float interpolatedTime, transformation t) { if (interpolatedTime == 1) { alarmClockArrayList.remove(position); adapter.notifyDataSetChanged(); } else { v.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime); v.requestLayout(); v.setAlpha(1.0f - interpolatedTime); } } @OverrIDe public boolean willChangeBounds() { return true; } }; a.setDuration(400); v.startAnimation(a);}
解决方法:
实现动画侦听器以捕获最终回调
r.setAnimationListener(new OAnimationListener(this));
班级的例子:
public class OAnimationListener implements AnimationListener{ private MyVIEw vv; public OAnimationListener(MyVIEw vv) { // Todo auto-generated constructor stub this.vv = vv; } @OverrIDe public voID onAnimationStart(Animation animation) { // Todo auto-generated method stub } @OverrIDe public voID onAnimationRepeat(Animation animation) { // Todo auto-generated method stub } @OverrIDe public voID onAnimationEnd(Animation animation) { if (vv != null) vv.stopAnim(2); //or any wanted callback }}
别忘了设置这个:
r.setRepeatCount(0); r.setFillAfter(true);
总结 以上是内存溢出为你收集整理的android – applyTransformation用interpolatedTime == 1调用两次全部内容,希望文章能够帮你解决android – applyTransformation用interpolatedTime == 1调用两次所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)