我对Android相当陌生,并试图创建自定义视图来显示饼图。我对Java很熟悉,并且之前已经在iOS/Swift中编写了饼图代码。将数据传递给Android中的自定义视图
我的问题是数据看起来并没有像我期望的那样通过,或者可能是在超类设置数据之前调用onDraw函数。
我想知道传递数据在onDraw函数中使用的最佳方法。到目前为止,从像Android Custom View Constructor帖子有点帮助我有下面的代码:
public PieChart(Context _context) {
this(_context, null);
}
public PieChart(Context _context, AttributeSet _attrs) {
this(_context, _attrs, null);
}
public PieChart(Context _context, AttributeSet _attrs, ArrayList<ChartData> _data) {
super(_context, _attrs);
if(this.isInEditMode()) {
data = new ArrayList<ChartData>();
data.add(new ChartData("Column A", 50));
data.add(new ChartData("Column B", 75));
data.add(new ChartData("Column C", 60));
} else {
data = _data;
}
context = _context;
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
pieRectangle = new RectF(0,0,0,0);
...
}
这是从我的活动称为是这样的:
// create the chart
PieChart pieChart = new PieChart(this, null, categoriesChartData);
// add the chart to the linearLayout
linearLayout.addView(pieChart);
而且我PieChart.onDraw开始像这样的:
protected void onDraw(Canvas canvasChart) {
Log.d(TAG, "Size of data = " + data.size()); // crashes here
...
}
注意,在界面设计师,饼图看起来不错,所以我知道的onDraw方法的工作,它只是,当应用程序被运行中的数据是赚不到它。
我没有增加额外的功能和调用,因为我没有很多Android经验,所以我想问问社区什么是问题,什么是最好的方法。
非常感谢提前!
你对视图的延伸是什么?为什么if(this.isInEditMode())? –
你不应该添加一个新的自定义构造函数。你应该添加一个setter。 – EpicPandaForce
如果出现错误,请发布logcat。 – Enzokie