*/
public String getPieLabel(float value, PieEntry pieEntry) {
return getFormattedValue(value);
}
/**
-
Used to draw radar value labels, calls {@link #getFormattedValue(float)} by default.
-
@param radarEntry entry being labeled
-
@return formatted string label
*/
public String getRadarLabel(RadarEntry radarEntry) {
return getFormattedValue(radarEntry.getY());
}
/**
-
Used to draw bubble size labels, calls {@link #getFormattedValue(float)} by default.
-
@param bubbleEntry bubble being labeled, also contains X and Y values
-
@return formatted string label
*/
public String getBubbleLabel(BubbleEntry bubbleEntry) {
return getFormattedValue(bubbleEntry.getSize());
}
/**
-
Used to draw high labels, calls {@link #getFormattedValue(float)} by default.
-
@param candleEntry candlestick being labeled
-
@return formatted string label
*/
public String getCandleLabel(CandleEntry candleEntry) {
return getFormattedValue(candleEntry.getHigh());
}
}
复制代码
第四步:MyValueFormatter
public class MyValueFormatter extends ValueFormatter{
private final DecimalFormat mFormat;
private String suffix;
public MyValueFormatter(String suffix) {
mFormat = new DecimalFormat(“0000”);
this.suffix = suffix;
}
@Override
public String getFormattedValue(float value) {
return mFormat.format(value) + suffix;
}
@Override
public String getAxisLabel(float value, AxisBase axis) {
if (axis instanceof XAxis) {
return mFormat.format(value);
} else if (value > 0) {
return mFormat.format(value) + suffix;
} else {
return mFormat.format(value);
}
}
}
复制代码
第五步:MainAcyivity
package detongs.hbqianze.him.linechart;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import java.util.ArrayList;
import detongs.hbqianze.him.linechart.chart.MyValueFormatter;
import detongs.hbqianze.him.linechart.chart.ValueFormatter;
public class MainActivity extends AppCompatActivity {
private BarChart chart;
private TextView te_cache;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
chart = findViewById(R.id.chart1);
te_cache = findViewById(R.id.te_cache);
chart.getDescription().setEnabled(false);
//设置最大值条目,超出之后不会有值
chart.setMaxVisibleValueCount(60);
//分别在x轴和y轴上进行缩放
chart.setPinchZoom(true);
//设置剩余统计图的阴影
chart.setDrawBarShadow(false);
//设置网格布局
chart.setDrawGridBackground(true);
//通过自定义一个x轴标签来实现2,015 有分割符符bug
ValueFormatter custom = new MyValueFormatter(" ");
//获取x轴线
XAxis xAxis = chart.getXAxis();
//设置x轴的显示位置
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//设置网格布局
xAxis.setDrawGridLines(true);
//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
xAxis.setAvoidFirstLastClipping(false);
//绘制标签 指x轴上的对应数值 默认true
xAxis.setDrawLabels(true);
xAxis.setValueFormatter(custom);
//缩放后x 轴数据重叠问题
xAxis.setGranularityEnabled(true);
//获取右边y标签
YAxis axisRight = chart.getAxisRight();
axisRight.setStartAtZero(true);
//获取左边y轴的标签
YAxis axisLeft = chart.getAxisLeft();
//设置Y轴数值 从零开始
axisLeft.setStartAtZero(true);
chart.getAxisLeft().setDrawGridLines(false);
//设置动画时间
chart.animateXY(600,600);
chart.getLegend().setEnabled(true);
getData();
//设置柱形统计图上的值
chart.getData().setValueTextSize(10);
for (IDataSet set : chart.getData().getDataSets()){
set.setDrawValues(!set.isDrawValuesEnabled());
}
}
public void getData(){
ArrayList values = new ArrayList<>();
Float aFloat = Float.valueOf(“2015”);
Log.v(“xue”,“aFloat+++++”+aFloat);
BarEntry barEntry = new BarEntry(aFloat,Float.valueOf(“100”));
BarEntry barEntry1 = new BarEntry(Float.valueOf(“2016”),Float.valueOf(“210”));
BarEntry barEntry2 = new BarEntry(Float.valueOf(“2017”),Float.valueOf(“300”));
BarEntry barEntry3 = new BarEntry(Float.valueOf(“2018”),Float.valueOf(“450”));
BarEntry barEntry4 = new BarEntry(Float.valueOf(“2019”),Float.valueOf(“300”));
BarEntry barEntry5 = new BarEntry(Float.valueOf(“2020”),Float.valueOf(“650”));
BarEntry barEntry6 = new BarEntry(Float.valueOf(“2021”),Float.valueOf(“740”));
values.add(barEntry);
values.add(barEntry1);
values.add(barEntry2);
values.add(barEntry3);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
为了方便有学习需要的朋友,我把资料都整理成了视频教程(实际上比预期多花了不少精力)
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,没有人能随随便便成功。
加油,共勉。
,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,没有人能随随便便成功。
加油,共勉。