单击 ViewHolder 中的向下箭头时如何将动画向下滑动设置为卡片视图?

How to set Animation Slide Down to card view when click on arrow down in ViewHolder?

我尝试在用户单击向下箭头图标时将向下滑动动画设置为卡片,但当我设置动画侦听器(this) 时它不起作用。它在 "this" 关键字处出错。 注意 我在片段中使用回收视图和卡片。 下面是我的代码

class ListViewHolder extends RecyclerView.ViewHolder{
        TextView tvTitle, tvDescription;
        ImageView ivDropDown;
        LinearLayout ll_footer;
        Button btnClose;
        Animation slideDown;

        public ListViewHolder(View itemView) {
            super(itemView);
            tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
            tvDescription = (TextView) itemView.findViewById(R.id.tv_description);
            ivDropDown = (ImageView) itemView.findViewById(R.id.iv_arrow_down);
            ll_footer = (LinearLayout) itemView.findViewById(R.id.ll_footer);
            btnClose = (Button) itemView.findViewById(R.id.btn_close);

            btnClose.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
//                    callBack.onButtonCloseClick(getAdapterPosition());
                    ll_footer.setVisibility(View.GONE);
                }
            });


            ivDropDown.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    callBack.onImageClick(getAdapterPosition());
                    slideDown = AnimationUtils.loadAnimation(context, R.anim.slide_down);
                    ll_footer.setAnimation(slideDown);
                    slideDown.setAnimationListener();
                    ll_footer.setVisibility(View.VISIBLE);
                }
            });
        }
    }

你还没有开始动画。 这样做:

class ListViewHolder extends RecyclerView.ViewHolder implements Animation.AnimationListener{ 
    TextView tvTitle, tvDescription;
    ImageView ivDropDown;
    LinearLayout ll_footer;
    Button btnClose;
    Animation slideDown;

    public ListViewHolder(View itemView) {
        super(itemView);
        tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
        tvDescription = (TextView) itemView.findViewById(R.id.tv_description);
        ivDropDown = (ImageView) itemView.findViewById(R.id.iv_arrow_down);
        ll_footer = (LinearLayout) itemView.findViewById(R.id.ll_footer);
        btnClose = (Button) itemView.findViewById(R.id.btn_close);

        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override 
            public void onClick(View view) {
//                    callBack.onButtonCloseClick(getAdapterPosition()); 
                ll_footer.setVisibility(View.GONE);
            } 
        }); 


        ivDropDown.setOnClickListener(new View.OnClickListener() {
            @Override 
            public void onClick(View view) {
                callBack.onImageClick(getAdapterPosition()); 
                slideDown = AnimationUtils.loadAnimation(context, R.anim.slide_down);
                ll_footer.startAnimation(slideDown);
                slideDown.setAnimationListener(ListViewHolder.this);
                ll_footer.setVisibility(View.VISIBLE);
            } 
        }); 
    } 
    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {

    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
} 

首先,创建以下名为 slide_down.xml 的动画文件:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">

    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromYDelta="-100%"
        android:toYDelta="0" />
</set>

之后,使用上面的动画文件如下:

ivDropDown.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                callBack.onImageClick(getAdapterPosition());
                Animation slideDown = AnimationUtils.loadAnimation(mContext,
                R.anim.slide_down);
        slideDown.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                // show the footer
                ll_footer.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationEnd(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
                ll_footer.startAnimation(slideDown);
            }
        });
 Pass context from activity to adapter class using adapter constructor. 

然后使用以下行并删除动画侦听器。

 slideDown = AnimationUtils.loadAnimation(context, R.anim.slide_down);
                        ll_footer.startAnimation(slideDown);