ExpandableListview上的LayoutTransition动画无法正常工作

时间:2014-04-25 13:05:58

标签: java android android-animation expandablelistview

当一个组在ExpandableListView上展开/折叠时,我想应用一个简单的rotationX动画。下面的代码适用于前两个扩展,但是在两次/三次/五次之后不能播放定义的动画。奇怪的是,我第一次展开/折叠它是完美的!

ExpandableListview exp = new ExpandableListview(context);
// set adapter code 
LayoutTransition transition = new LayoutTransition();

Animator appearAnim = ObjectAnimator.ofFloat(null, "rotationX", 90f,0f).setDuration(transition.getDuration(LayoutTransition.APPEARING));
transition.setAnimator(LayoutTransition.APPEARING, appearAnim); // I also tried first argument equals DISSAPEARING, CHANGING, etc


exp.setLayoutTransition(transition);

任何想法?这种做法完全错了吗?

此时我必须注意到这不是重复的!我正在寻找一个将使用LayoutTransition类/方法来解决的解决方案。

1 个答案:

答案 0 :(得分:1)

这里有一些很棒的示例可以帮助您在ExpandableListView上进行扩展/折叠动画,在使用OpenGL渲染动画的android-flip库中,如果应用程序支持的最低Android版本是4.0,可以使用标准的Android SDK方法而不是OpenGL:View.setRotationX(),View.setScaleX()等。启用硬件加速时(默认情况下,如果目标API级别>> 14,则启用它),这些方法使用设备GPU非常有效地工作。

您可以使用此 FoldableLayout 在ExpandableListView上实现折叠动画以进行展开/折叠。

enter image description here

  

FoldableLayout中的布局实现:

     

设计的第一个元素是可以折成两半的布局。我们的   方法相当大胆:主要布局(FoldableItemLayout)简单   包含一个专门的布局(BaseLayout)。在动画期间,   BaseLayout将其内容写入缓存,这是一个专门创建的缓存   Bitmap对象基于原始布局的大小。查看plaincopy   到clipboardprint?

class FoldableItemLayout extends FrameLayout {  
    @Override  
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {  
        Bitmap cacheBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);  
        mBaseLayout.setCacheCanvas(new Canvas(cacheBitmap));  
    }  
}  

class BaseLayout extends FrameLayout {  
    private Canvas mCacheCanvas;  

    private void setCacheCanvas(Canvas cacheCanvas) {  
        mCacheCanvas = cacheCanvas;  
    }  

    @Override  
    public void draw(Canvas canvas) {  
        mCacheCanvas.drawColor(0, PorterDuff.Mode.CLEAR);  
        super.draw(mCacheCanvas);  
    }  
}  
  

另外,我们需要使用两个额外的视图(PartView) - 用于   上半部分和下半部分 - 这将显示相​​应的   缓存中的数据,表示图像的上半部分和下半部分   (位图)。两个视图都包含主要布局的整个区域,但是   仅显示所需的部件。为了达到这个效果,我们计算了   Bitmap限制​​ - 并且在onDraw()方法中我们使Canvas绘制了   通过drawBitmap(Bitmap位图,Rect src,RectF dst,   油漆涂料)方法。

     

然后我们通过设置来设置旋转这些额外的视图   setRotationX()方法以相应的角度,实现   图像的下部和上部的独立旋转。至   拉下来,我们为FoldableItemLayout添加一个新参数 -   名为FoldRotation。

来源:How to Make a Paper Folding Animation in Android?