recherche

Maison  >  Questions et réponses  >  le corps du texte

Animation de la barre de progression dans l'élément recyclerview Android - animation de la barre de progression dans l'élément recyclerview

Écrivez un demo 想在recyclerview中 的item dans lequel la barre de progression a un effet d'animation

Utilisez simplement des paramètres constantssetProgress()的方式来写了,可是在实际过程中,会发生动画播放在不正确的item
即使我判断如果itemS'il est réutilisé, vous ne pouvez rien faire si vous l'annulez. .


SparseIntArray sparseIntArray = new SparseIntArray();
ArrayMap<Integer, Disposable> arrayMap = new ArrayMap<>();

binding.recyclerView.setAdapter(new BaseRecyclerViewAdapter<Integer>(strings) {
    @Override
    public int getLayoutId(int viewType) {
        return R.layout.recycler_item;//item布局 其中有一个横向的进度条空间
    }

    @Override
    protected void convert(VH holder, Integer i, int position) {
  
        int after = sparseIntArray.get(position);        //查看item是否第一次使用
        Disposable disposable1 = arrayMap.get(position);
        if (disposable1 != null) {
            PtrCLog.d("RecyclerViewActivity", "convert: " + "取消订阅");
            disposable1.dispose();
        }

        if (after == i) {
            PtrCLog.d("RecyclerViewActivity", "convert: " + "相同后直接设置");
            holder.setProgress(R.id.progress_bar_financing_item, i);
        } else {
            sparseIntArray.put(position, i);//存
            int castProgress = (i);      //当前得到的
            PtrCLog.d("LoanListAdapter", "progress: " + castProgress);
            PtrCLog.d("LoanListAdapter", "初次生效当前坐标为: " + position + "-----" + "存储的进度为" + castProgress);
            Disposable disposable = Observable
                    .intervalRange(0, castProgress + 1, 0, 30, TimeUnit.MILLISECONDS)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(aLong -> {
                                PtrCLog.d("LoanListAdapter", "convert: " + position + "----" + aLong + "");
                                PtrCLog.d("RecyclerViewActivity", "convert: after" + (after == i));
                                holder.setProgress(R.id.progress_bar_financing_item, Integer.parseInt(aLong + ""));
                            }, throwable -> {
                            }
                            , () -> {
                            });
            arrayMap.put(position, disposable);
        }
    }
});
    
扔个三星炸死你扔个三星炸死你2750 Il y a quelques jours1259

répondre à tous(1)je répondrai

  • 三叔

    三叔2017-06-08 11:04:32

    À l'avenir, ce type d'"animation" devrait se faire autant que possible avec de l'animation,

     ValueAnimator animator = ValueAnimator.ofInt(0, castProgress);
            animator.addUpdateListener(animation -> {
                int value = (int) animation.getAnimatedValue();
                holder.setProgress(R.id.progress_bar_financing_item, value);
            });
            animator.setDuration(2000);
            animator.start();

    répondre
    0
  • Annulerrépondre