FragmentStatePagerAdapter中的notifyDataSetChanged()上的动画

时间:2017-09-10 16:12:52

标签: android animation fragmentstatepageradapter

通过覆盖getItemPosition()方法,我可以刷新我的FragmentStatePagerAdapter,它工作正常。但内容的变化并不好看。

刷新FragmentStatePagerAdapter时是否可以应用任何类型的动画?

1 个答案:

答案 0 :(得分:0)

我也面临同样的问题。所以,你应该怎么做。在适配器中创建全局变量,以获得想要连续动画的内容。

现在,当你点击按钮开始动画时。将值传递给全局变量。

当你notifydatasetchanged它不会影响你的动画。

我没有找到任何正确的方法。所以,做了这件事。它工作得很完美。

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);
    }
}
}