0

By overwriting getItemPosition() method I can refresh my FragmentStatePagerAdapter, which works fine. But the change of the contents is not nice to see.

Is there possibility to apply any kind of animation as I refresh the FragmentStatePagerAdapter?

1 Answers1

0

I was also facing same issue.So, what should you do. Make global variables in your adapter for what you want continuous animate.

Now when you start animation on button click. Pass value to global variables.

When you notifydatasetchanged it doesn't effect your animation.

I haven't found any correct way. So, did this thing.It's working perfect.

public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context mContext;
    private ArrayList<Response.DataBean> feedArrayList = new ArrayList<>();
    FeedClickListener mListener;
    
    @Inject
    ImageUtility mImageUtility;
    @Inject
    AppUtils mAppUtils;
    @Inject
    PreferenceManager mPref;

    private float prevPosition = -1;
    
    private YoYo.YoYoString ropeText,ropeImage;
    private int tempHandlePlayPause = 0;
    private TextView tempTextView;
    private ImageView tempImageView;

    /**
     * click listeners
     */
    interface FeedClickListener {

        void onPlayAudioClicked( FeedResponse.DataBean feedItem, SeekBar audioProgress, int position);

        void onPauseAudioClicked(FeedResponse.DataBean feedItem);
    }


    public HomeAdapter(Context context, ArrayList<Response.DataBean> mDataArrayList, HomeClickListener mFeedListener) {
        ((BaseApplication) context.getApplicationContext()).getAppComponent().inject(this);
        this.mContext = context;
        this.feedArrayList = mDataArrayList;
        mListener = mFeedListener;

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       
            return new ItemViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false));
        

    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        switch (holder.getItemViewType()) {
           
                ItemViewHolder holderItem = (ItemViewHolder) holder;
                int adapterPosition = holder.getAdapterPosition() - 1;
              
                    holderItem.normalContainer.setVisibility(View.VISIBLE);
                    holderItem.bannerContainer.setVisibility(View.GONE);
                    setUpNormalItem(adapterPosition, holderItem);
               
        }

    }

    private void setUpNormalItem(int adapterPosition, ItemViewHolder holder) {

        FeedResponse.DataBean feedItem = feedArrayList.get(adapterPosition);
        // set up data to current view holder items
        setUpItems(holder, feedItem, adapterPosition);

    }


    private void setUpItems(ItemViewHolder holder, FeedResponse.DataBean feedItem, int position) {
    
        if (feedItem.isstop()) {
            holder.playImageView.setVisibility(View.GONE);
            holder.pauseImageView.setVisibility(View.VISIBLE);

        } else {
            holder.playImageView.setVisibility(View.VISIBLE);
            holder.pauseImageView.setVisibility(View.GONE);
            holder.audioProgress.setProgress(0);
        }

        holder.playImageView.setOnClickListener(v -> {

            feedItem.setIscomplete(false);

            if (prevPosition >= 0) {
                feedArrayList.get((int)prevPosition).setIsstop(false);
                feedArrayList.get((int)prevPosition).setIsPrepare(false);
            }
                feedArrayList.get(position).setIsstop(true);
                feedArrayList.get(position).setIsPrepare(true);

            mListener.onPlayAudioClicked(feedItem, holder.audioProgress, position);

            prevPosition = position;

            tempHandlePlayPause = 1;

            tempTextView = holder.tvPlayingBlink;
            tempImageView = holder.pauseImageView;

            notifyDataSetChanged();


        });
        holder.pauseImageView.setOnClickListener(v -> {

            feedArrayList.get(position).setIsstop(false);

            tempTextView = holder.tvPlayingBlink;
            tempImageView = holder.pauseImageView;

            tempHandlePlayPause = 0;

            mListener.onPauseAudioClicked(feedItem);    

            notifyDataSetChanged();

        });


        if (feedItem.isPrepare()) {

            holder.tvPlayingBlink.setVisibility(View.VISIBLE);

            if (tempHandlePlayPause == 1){
                startAnimation();
            }else {
                stopAnimation();
            }

        } else {
            holder.tvPlayingBlink.setVisibility(View.INVISIBLE);
            if (tempHandlePlayPause == 1){
                startAnimation();
            }else {
                stopAnimation();
            }
        }
    
        // play on complete audio
        if (feedItem.iscomplete()) {

            holder.playImageView.setVisibility(View.VISIBLE);
            holder.pauseImageView.setVisibility(View.GONE);

        }

        if ((!feedItem.iscomplete()) && feedItem.getTotalLength() > 0) {

            holder.audioProgress.setMax(feedItem.getTotalLength());
            holder.audioProgress.setProgress(0);

        }
    }

    private void startAnimation(){

        if (ropeText != null || ropeImage != null) {
            ropeText.stop(true);
            ropeImage.stop(true);
        }
        ropeText = YoYo.with(Techniques.Pulse)
                .duration(800)
                .repeat(YoYo.INFINITE)
                .pivot(YoYo.CENTER_PIVOT, YoYo.CENTER_PIVOT)
                .interpolate(new AccelerateDecelerateInterpolator())
                .playOn(tempTextView);

        ropeImage = YoYo.with(Techniques.Pulse)
                .duration(800)
                .repeat(YoYo.INFINITE)
                .pivot(YoYo.CENTER_PIVOT, YoYo.CENTER_PIVOT)
                .interpolate(new AccelerateDecelerateInterpolator())
                .playOn(tempImageView);
    }

    private void stopAnimation(){

        if (ropeText != null || ropeImage != null) {
            ropeText.stop(true);
            ropeImage.stop(true);
        }
    }

    public void updateData(List<FeedResponse.DataBean> items) {
        feedArrayList.clear();
        feedArrayList.addAll(items);
        notifyDataSetChanged();

    }

    public void deleteItem(int position) {
        feedArrayList.remove(position);
        notifyDataSetChanged();
    }

 
    @Override
    public int getItemCount() {
        return (feedArrayList.size());
    }

    public static class ItemViewHolder extends RecyclerView.ViewHolder {
    
        @BindView(R.id.image_view_3)
        ImageView imageView3;
        @BindView(R.id.tvplayingblink)
        TextView tvPlayingBlink;

        public ItemViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }
} 
Gary Chen
  • 248
  • 2
  • 14
Saveen
  • 4,120
  • 14
  • 38
  • 41