recyclerview 动画效果实现

2015-1-7 9:08:45     人阅读    


我想在 实现自己的  recyclerview 动画效果,如下图,点击项目的时候中间插入并展示报表,我想独立开发,不想使用任何第三方库,

 

recyclerview动画效果

\

大体实现思路:
1、集成 RecyclerView.ViewHolder ,实现 View.OnClickListener  监听事件,参考如下代码:

public static class ExampleViewHolder extends RecyclerView.ViewHolder
    implements View.OnClickListener {

    private int originalHeight = 0;
    private boolean isViewExpanded = false;
    private YourCustomView yourCustomView



    // ..... CODE ..... //

}


其中变量 originalHeight 和 isViewExpanded 会在animation(动画)进程中使用 ,在构造函数中初始化view,如下

public ExampleViewHolder(View v) {
     super(v);
     v.setOnClickListener(this);

     // 初始化其他的views,例如 TextView,ImageView

     //  如果 isViewExpanded == false ,设置 visibility

     if (isViewExpanded == false) {
         // Set Views to View.GONE and .setEnabled(false)
         yourCustomView.setVisibility(View.GONE);
         yourCustomView.setEnabled(false);
     }

 }


到现在构造函数已经配置好了在用户点击RecyclerView item的时候展示的views了,
然后就需要使用  ValueAnimator 和 the Animation objects 对象了,我们需要重写  onClick 方法来达到效果

@Override
public void onClick(final View view) {
    //  如果  originalHeight 是0 ,就找到view被使用的高度
    //  通过这段代码获得cardview高度
    if (originalHeight == 0) {
            originalHeight = view.getHeight();
        }

    //  声明一个 ValueAnimator 对象
    ValueAnimator valueAnimator;
        if (!mIsViewExpanded) {
            yourCustomView.setVisibility(View.VISIBLE);
            yourCustomView.setEnabled(true);
            mIsViewExpanded = true;
            valueAnimator = ValueAnimator.ofInt(originalHeight, originalHeight + (int) (originalHeight * 2.0)); 
       //   这个方法中的这个值可以按照你自己的喜好改动
        } else {
            mIsViewExpanded = false;
            valueAnimator = ValueAnimator.ofInt(originalHeight + (int) (originalHeight * 2.0), originalHeight);

            Animation a = new AlphaAnimation(1.00f, 0.00f); // Fade out

            a.setDuration(200);
            //  给 animation  onAnimationEnd配置监听
            a.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {

                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    yourCustomView.setVisibility(View.INVISIBLE);
                    yourCustomView.setEnabled(false);
                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });

            // 在barChart上设置 animation
            barChart.startAnimation(a);
        }
        valueAnimator.setDuration(200);
        valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            public void onAnimationUpdate(ValueAnimator animation) {
                Integer value = (Integer) animation.getAnimatedValue();
                view.getLayoutParams().height = value.intValue();
                view.requestLayout();
            }
        });


        valueAnimator.start();

    }

现在当你点击 独立的  RecyclerView  中 cardview 的时候就可以展示你想展示的视图了,确保自定义的  customView 在xml文件中配置了

 


原文地址:http://www.itmmd.com/201501/450.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

Android Studio报错ERROR: “ Cannot resolve symbol '@string/edit_message' ”   上一篇
下一篇  android学习笔记(36)使用AlertDialog创建自定义对话框
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!