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值变化动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)