2016-04-20 16 views
3

Ich versuche eine Reihe von Ansichten vertikal in einem RecyclerView.Adapter zu animieren, funktioniert die Animation gut mit Android: clipChildren = "false", android: clipToPadding = "false "und viewHolder.linear.postInvalidate(), aber der ClickListener funktioniert nicht, nachdem die Animation beendet wurde. Ich verwende ObjectAnimator, weil ich den Link lesen Android Animation - Button stays clickableÄhnliche Facebook Reaktionen - Animierte Ansicht mit ObjectAnimator clicklistener funktioniert nicht

enter image description here

Einige Code

@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(); 

}); 

} 

Nur IV1 clicklistener funktioniert, wenn sie nicht zusammengebrochen ist. Wie kann ich es funktionieren lassen?

Antwort

1

Sie können dies nicht tun, da dies nicht die Art ist, wie der Android Touch-Ereignisprozess funktioniert.

Viewgroup oder es ist Unterklasse (FrameLayout, RelativeLayout, Linearlayout, etc.) Versand Note Veranstaltung es childviews auf childview der frame.so basiert, wenn Sie auf IV2 oder IV3 oder IV4 klicken, wird das Touch-Ereignis haben bestanden nicht einmal an die Mutter (RecyclerView-Element), so dass die Elternansicht nie geändert wurde, um das Berührungsereignis an iv2 oder iv3 oder iv4 zu behandeln oder zu senden.

was Sie tun sollten, ist ein neues Fenster mit iv1-iv4 darin mit WindowManager Pop und berechnen Sie sorgfältig die Position, so dass es genauso aussieht wie Sie die RecyclerView-Artikel gemacht haben.nur dann können Sie das touchevent erhalten und onClick Ereignis

Facebook Reaktionen verwenden definitiv Windowmanager ein neues Fenster mit den Tasten Pop:

hier sind, wie es aussieht, wenn ich drehe auf dem Profil GPU-Rendering-Option in Entwickleroptionen Facebook Reactions closed




Mitteilung gibt es zwei Reihen von Balken auf dem Bildschirm jetzt, wenn ich lange auf die Schaltfläche klicken, wird der kleinere ist ein neues Fenster, die Reaktionen enthält Schaltflächen

Facebook Reactions opened

+0

Hallo, ich denke, was ich versuche zu tun ist etwas wie Facebook Reaktionen. Denkst du, dass es mit WindowManager möglich ist? danke – schwertfisch

+0

Ich habe meine Antwort, Facebook Reaktionen mit WindowManager bearbeitet, um das zu tun. – 7heaven

+0

Vielen Dank !, Ich versuche es zu implementieren. – schwertfisch

0

Die clicklistener gerade ist in der falschen Position, sollte es im Viewholder sein

// 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); 
} 
+0

Danke für deine Antwort, ich habe es versucht, aber ich arbeite nicht, ich werde es mit der ersten Antwort versuchen – schwertfisch