Android 类似的Facebook反应-使用ObjectAnimator clicklistener的动画视图不工作
我正在尝试在RecycleView.Adapter中垂直设置一组视图的动画,使用android:clipChildren=“false”、android:clipToPadding=“false”和viewHolder.linear.postInvalidate()可以很好地制作动画,但动画结束后ClickListener无法工作。我使用ObjectAnimator是因为我阅读了此链接 一些代码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
@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的反应。非常感谢!,我正在努力实现它。