【发布时间】:2016-11-07 18:50:20
【问题描述】:
我对 Android 还很陌生,正在尝试创建一个自定义视图来显示饼图。我对 Java 没问题,之前用 iOS/Swift 写过饼图代码。
我的问题是数据似乎没有像我预期的那样被传递,或者可能是在从超类以某种方式设置数据之前调用了 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。
-
如果有错误请发布logcat。
-
@OgnianGloushkov 因为这样我就可以在界面设计器中看到饼图