我想高效地添加新添加的ListView项目。我认为这很简单,但我很容易解决问题:
我想播放TransitionDrawable动画,一旦完成 - 回放它。新项目将在一段时间内升级,然后它将与其他项目融合。
TransitionDrawable具有向前和向后播放动画的方法,但没有可用于同步的方法。我期望有可能为动画完成指定回调,例如:
TransitionDrawable transition = (TransitionDrawable) view.getBackground();
transition.startTransition(500, new TransitionCompleteListener(){
public void completed()
{
transition.reverseTransition(500);
}
});
但是TransitionDrawable类支持这一点。
问题是:如何播放TransitionDrawable动画,当它完成时 - 立即向后播放?我有一个使用Timer
类来延迟执行动画后退部分的想法,但是对于这么简单的事情,这个解决方案看起来有点太重了。
或许我应该使用与TransitionDrawable不同的东西?我想避免使用Property Animations,因为我想支持更旧的设备(从Honeycomb开始就可以使用PA)。
答案 0 :(得分:5)
我自己还没有真正尝试过,但是我想说一下你的目标也可能是老式的View动画,准确的tween。您可以通过更改与行布局具有完全相同尺寸的View的Alpha属性来创建相同的效果,而不是直接操作背景drawable(假设您正在执行的操作)。然后,您可以在单个AnimationSet中指定“正常”动画及其反向,并使后者以基于第一个的延迟开始。或者,动画提供AnimationListener,您可以在第一个动画结束时连接并获得通知,然后开始反转。
查看TransitionDrawable的源代码,我还看到了使用自定义侦听器接口扩展当前实现的一些可能性。实际上实现你在问题的代码片段中说明的模式应该不会太难。
我现在的时间有点短,所以请你给我一个评论以防你需要更具体的指针(例如代码片段) - 然后我会试着找一些时间来帮助你。 / p>
答案 1 :(得分:0)
也许你可以试试这个:
Drawable[] transBack = new Drawable[] { res.getDrawable( R.drawable.ic_acept_blue ), res.getDrawable( R.drawable.ic_acept )};
ImageView btn = (ImageView) findViewById(R.id.resource);
TransitionDrawable transitionAcept = new TransitionDrawable(transBack);
btn.setImageDrawable(transitionAcept);
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:{
TransitionDrawable transition = (TransitionDrawable) btn.getDrawable();
transition.startTransition(75);
}break;
case MotionEvent.ACTION_UP:{
TransitionDrawable transition = (TransitionDrawable) btnAcept.getDrawable();
transition.reverseTransition(75);
v.performClick();
}break;
default:
break;
}
return true;
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//... DO Something here
}
});
上面的代码实现了一个TouchListener来处理反向和正向转换,还有一个clickListener来处理你的动作。这就是为什么在MotionEvent.ACTION_UP
中你呼吁v.performClick();
希望这有助于你。
答案 2 :(得分:0)
我已经扩展了TransitionDrawable的实现(实际上是复制并修改了)以接受一个repeatCount参数,该参数指出了前后转换的次数。请参阅下面的存储库中的RepeatableTransitionDrawable
。
我还计划添加两个以上的drawables支持。
答案 3 :(得分:0)
尝试使用处理程序;)
final TransitionDrawable transition = (TransitionDrawable) sizesSelectionLayout.getBackground();
int duration = 500;
transition.startTransition(duration);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
transition.reverseTransition(duration);
}
}, duration);
)
答案 4 :(得分:-2)
使用ViewAnimator进行评估 http://developer.android.com/reference/android/widget/ViewAnimator.html
附加到ViewAnimator的输入和输出动画对象具有一个AnimationListener,用于触发您要捕获的事件