анимация прогресса поисковой панели? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть пользовательская панель поиска. Я хочу прогрессировать анимацию в поиске бара. Я также прогрессировать изображение большого пальца, но индикатор прогресса нет. Значения большого пальца и прогресса разные. Как я могу прогрессировать анимацию?

    seekbarElectra.setMax((int) totalSpanElectra);
    seekbarElectra.setProgress((int) thumbPositionElectra);

    progressItemListElectra = new ArrayList<ProgressItem>();
    // green span
    mProgressItemElectra = new ProgressItem();
    mProgressItemElectra.progressItemPercentage = (greenSpanElectra / totalSpanElectra) * 100;
    mProgressItemElectra.color = R.color.green;
    progressItemListElectra.add(mProgressItemElectra);

    // greyspan
    mProgressItemElectra = new ProgressItem();
    mProgressItemElectra.progressItemPercentage = (darkGreySpanElectra / totalSpanElectra) * 100;
    mProgressItemElectra.color = R.color.colorgray;
    progressItemListElectra.add(mProgressItemElectra);
    seekbarElectra.initData(progressItemListElectra);
    seekbarElectra.invalidate();
}

--------------------------- настраиваемая панель поиска ------------

    if (mProgressItemsList.size() > 0) {
        int progressBarWidth = getWidth();
        int progressBarHeight = getHeight();
        int thumboffset = getThumbOffset();
        int lastProgressX = 0;
        int progressItemWidth, progressItemRight;
        for (int i = 0; i < mProgressItemsList.size(); i++) {
            ProgressItem progressItem = mProgressItemsList.get(i);

            Paint progressPaint = new Paint();

            progressPaint.setColor(getResources().getColor(progressItem.color));

            progressItemWidth = (int) (progressItem.progressItemPercentage * progressBarWidth / 100);

            progressItemRight = lastProgressX + progressItemWidth;
            // for last item give right to progress item to the width
            if (i == mProgressItemsList.size() - 1 && progressItemRight != progressBarWidth) {
                progressItemRight = progressBarWidth;
            }
            Rect progressRect = new Rect();
            progressRect.set(lastProgressX, thumboffset / 2,progressItemRight, progressBarHeight - thumboffset / 2);
            canvas.drawRect(progressRect, progressPaint);
            lastProgressX = progressItemRight;
        }
        super.onDraw(canvas);
    }

}

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Сначала создайте ValueAnimator

private ValueAnimator valueAnimator = new ValueAnimator();

Затем установите слушатель для него:

private void setListener() {
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int firstAnimatedValue = (int) valueAnimator.getAnimatedValue("firstAnimatedValue");
            int secondAnimatedValue = (int) valueAnimator.getAnimatedValue("secondAnimatedValue");

            // update the properties here
        }
    });
}

Затем, чтобы запустить анимацию, установите значения следующим образом:

public void setAnimatedValues() {
    valueAnimator.setValues(
            new PropertyValuesHolder("firstAnimatedValue", fromValue1, toValue1),
            new PropertyValuesHolder("secondAnimatedValue", fromValue2, fromValue2)
    );

    valueAnimator.start();
}

Когда вы запускаете аниматор, слушатель должен вызываться несколько раз с промежуточными значениями.

0 голосов
/ 19 апреля 2019

Попробуйте:

public class ProgressBarAnimation extends Animation{
private ProgressBar progressBar;
private float from;
private float  to;

public ProgressBarAnimation(ProgressBar progressBar, float from, float to) {
    super();
    this.progressBar = progressBar;
    this.from = from;
    this.to = to;
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    super.applyTransformation(interpolatedTime, t);
    float value = from + (to - from) * interpolatedTime;
    progressBar.setProgress((int) value);
}

}

, чтобы позвонить:

 ProgressBarAnimation anim = new ProgressBarAnimation(progress, from, to);
 anim.setDuration(1000);
 progress.startAnimation(anim);
...