mpandroidchart – 条形图中的y值变化动画

mpandroidchart – 条形图中的y值变化动画,第1张

概述在barChart上调用animateY时,将重绘整个图表,将条形图从y-zero设置为y-new. barChart.invalidate();barChart.animateY(1000); 是否可以将动画限制为值更改.因此,允许用户看到图表如何从y-old(例如100)增长到y-new(例如120)? 我遇到了同样的问题,无法找到解决方案.所以,我创建了一个可以调用来处理这种任务的类. i 在barChart上调用animateY时,将重绘整个图表,将条形图从y-zero设置为y-new.
barChart.invalIDate();barChart.animateY(1000);

是否可以将动画限制为值更改.因此,允许用户看到图表如何从y-old(例如100)增长到y-new(例如120)?

解决方法 我遇到了同样的问题,无法找到解决方案.所以,我创建了一个可以调用来处理这种任务的类.
import androID.vIEw.animation.Interpolator;import androID.vIEw.animation.linearInterpolator;import com.github.mikephil.charting.charts.barlineChartBase;import com.github.mikephil.charting.charts.Chart;import com.github.mikephil.charting.data.Entry;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import androID.os.Handler;public class AnimateDataSetChanged {    private int duration;    private long startTime;    private int fps = 30;    private Handler timerHandler;    private Chart chart;    private List<Entry> oldData;    private List<Entry> newData;    private Interpolator interpolator;    public AnimateDataSetChanged(int duration,Chart chart,List<Entry> oldData,List<Entry> newData){        this.duration = duration;        this.chart = chart;        this.oldData = new ArrayList<>(oldData);        this.newData = new ArrayList<>(newData);        interpolator = new linearInterpolator();    }    public voID setInterpolator(Interpolator interpolator){        this.interpolator = interpolator;    }    public voID run(int fps){        this.fps = fps;        run();    }    public voID run(){        startTime = Calendar.getInstance().getTimeInMillis();        timerHandler = new Handler();        Runner runner = new Runner();        runner.run();    }    private class Runner implements Runnable{        @OverrIDe        public voID run() {            float increment = (Calendar.getInstance().getTimeInMillis() - startTime) / (float)duration;            increment = interpolator.getInterpolation(increment < 0f ? 0f : increment > 1f ? 1f :increment);            chart.getData().getDataSetByIndex(0).clear();            for(int i = 0; i < newData.size(); i++){                float oldY = oldData.size() > i ? oldData.get(i).getY() : newData.get(i).getY();                float oldX = oldData.size() > i ? oldData.get(i).getX() : newData.get(i).getX();                float newX = newData.get(i).getX();                float newY = newData.get(i).getY();                Entry e = new Entry(oldX + (newX - oldX) * increment,oldY + (newY - oldY) * increment);                chart.getData().getDataSetByIndex(0).addEntry(e);            }            chart.getXAxis().resetAxisMaximum();            chart.getXAxis().resetAxisMinimum();            chart.notifyDataSetChanged();            chart.refreshDrawableState();            chart.invalIDate();            if(chart instanceof barlineChartBase){                ((barlineChartBase)chart).setautoScaleMinMaxEnabled(true);            }            if(increment < 1f){                timerHandler.postDelayed(this,1000/fps);            }        }    }}

你可以像这样调用这个类:

List<Entry> oldEntrIEs = ...List<Entry> newEntrIEs = ...AnimateDataSetChanged changer = new AnimateDataSetChanged(600,mChart,oldEntrIEs,currentDataEntrIEs);changer.setInterpolator(new AccelerateInterpolator()); // optionally set the Interpolatorchanger.run();
总结

以上是内存溢出为你收集整理的mpandroidchart – 条形图中的y值变化动画全部内容,希望文章能够帮你解决mpandroidchart – 条形图中的y值变化动画所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1138203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存