Android 类似的Facebook反应-使用ObjectAnimator clicklistener的动画视图不工作

Android 类似的Facebook反应-使用ObjectAnimator clicklistener的动画视图不工作,android,animation,android-animation,objectanimator,Android,Animation,Android Animation,Objectanimator,我正在尝试在RecycleView.Adapter中垂直设置一组视图的动画,使用android:clipChildren=“false”、android:clipToPadding=“false”和viewHolder.linear.postInvalidate()可以很好地制作动画,但动画结束后ClickListener无法工作。我使用ObjectAnimator是因为我阅读了此链接 一些代码 @Override public void onBindViewHolder(fi

我正在尝试在RecycleView.Adapter中垂直设置一组视图的动画,使用android:clipChildren=“false”、android:clipToPadding=“false”和viewHolder.linear.postInvalidate()可以很好地制作动画,但动画结束后ClickListener无法工作。我使用ObjectAnimator是因为我阅读了此链接

一些代码

    @Override
    public void onBindViewHolder(final TViewHolder viewHolder, int i) {

   viewHolder.flGroupButtons.postInvalidate();
   viewHolder.iv1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         //not working
      });
..... clicklisteners

   viewHolder.iv4.setOnClickListener(new View.OnClickListener() {

      PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 1f);
        PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 1f);
        PropertyValuesHolder pvTranslativ1 = PropertyValuesHolder.ofFloat("translationY", viewHolder.iv1.getY() - (measureHeight * 5));


     ObjectAnimator animatoriv1 = ObjectAnimator.ofPropertyValuesHolder(viewHolder.iv1, scaleX, scaleY, pvTranslativ1);
        animatoriv1.setInterpolator(new DecelerateInterpolator());
        animatoriv1.setDuration(300);

     ....
     ......
     AnimatorSet as = new AnimatorSet();
        as.playTogether(animatoriv1, animatoriv2, animatoriv3, animatoriv4);
        as.start();

});

}
只有iv1 clicklistener在未折叠时工作。
我怎样才能让它工作呢?

你不能这样做,因为这不是Android touch事件处理的工作方式

ViewGroup或它的子类(FrameLayout、RelativeLayout、LinearLayout等)根据childview的框架将触摸事件分派给它的childview。因此,当您单击iv2、iv3或iv4时,触摸事件甚至没有传递给父对象(RecyclerView的项),因此,父视图从未更改过处理或将触摸事件分派到iv2、iv3或iv4

您应该做的是使用WindowManager弹出一个包含iv1-iv4的新窗口,并仔细计算位置,使其看起来与您对RecyclerView的项目所做的一样。只有这样,您才能接收touchevent和onClick事件

Facebook Reactions肯定是在使用WindowManager弹出一个带有按钮的新窗口:

下面是我在开发者选项中打开Profile GPU渲染选项时的样子




请注意,当我长时间单击like按钮时,屏幕上有两行栏,较小的一行是一个包含反应按钮的新窗口


clicklistener的位置不正确,它应该在viewholder中

// Adapter

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
    return NewsViewHolder.newInstance(parent);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    final NewsEntry newsEntity = news.get(position);
    ((NewsViewHolder) holder).bind(newsEntity);
}

// ViewHolder
public NewsViewHolder(NewsViewHolderBinding binding) {
    super(binding.getRoot());
    itemView.findViewById(R.id.viewname).setOnClickListener(this);
}

谢谢你的回答,我试过了,但没用,我会先回答你好,我想我试着做的是类似于Facebook的反应。您认为可以使用WindowManager吗?谢谢我用WindowManager编辑了我的答案,facebook的反应。非常感谢!,我正在努力实现它。