Похожие реакции Facebook — Анимированный вид с прослушивателем кликов ObjectAnimator не работает

Я пытаюсь анимировать набор представлений по вертикали в RecyclerView.Adapter, анимация хорошо работает с использованием android:clipChildren="false", android:clipToPadding="false" и viewHolder.linear.postInvalidate(), но ClickListener делает не работает после окончания анимации. Я использую ObjectAnimator, потому что прочитал эту ссылку Android Animation — кнопка остается доступной

введите здесь описание изображения

Некоторый код

    @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 работает, когда не свернут. Как я могу заставить его работать?


person schwertfisch    schedule 20.04.2016    source источник


Ответы (2)


Вы не можете этого сделать, потому что это не так, как работает процесс сенсорного события Android.

ViewGroup или его подкласс (FrameLayout, RelativeLayout, LinearLayout и т. д.) отправляют событие касания своим дочерним представлениям на основе кадра дочернего представления. Поэтому, когда вы нажимаете на iv2, iv3 или iv4, событие касания даже не передается родителю (элемент RecyclerView) , поэтому в родительском представлении никогда не было изменений для обработки или отправки события касания в iv2, iv3 или iv4.

что вам нужно сделать, это открыть новое окно с iv1-iv4 в нем с помощью WindowManager и тщательно рассчитать положение, чтобы оно выглядело так же, как вы делали с элементом RecyclerView. Только тогда вы можете получить событие touchevent и onClick

Facebook Reactions определенно использует WindowManager для открытия нового окна с кнопками:

вот как это выглядит, когда я включаю параметр рендеринга Profile GPU в настройках разработчика Реакции Facebook закрыты




Обратите внимание, что теперь, когда я долго нажимаю кнопку "Нравится", на экране появляется два ряда полосок, меньшая из которых представляет собой новое окно с кнопками реакции

Реакции Facebook открыты

person 7heaven    schedule 20.04.2016
comment
Здравствуйте, я думаю, что я пытаюсь сделать что-то похожее на Facebook Reactions. Как вы думаете, возможно ли это сделать с помощью WindowManager? спасибо - person schwertfisch; 21.04.2016
comment
Я отредактировал свой ответ, реакции на Facebook, используя для этого WindowManager. - person 7heaven; 21.04.2016
comment
Спасибо большое! Попробую реализовать. - person schwertfisch; 21.04.2016

Clicklistener просто находится в неправильном положении, он должен быть в окне просмотра

// 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);
}
person Christian Stengel    schedule 20.04.2016
comment
Спасибо за ваш ответ, я пробовал, но у меня не работает, я попробую с первым ответом - person schwertfisch; 21.04.2016