使用android写一个控件绘制一个柱状图
时间: 2024-02-12 11:02:50 浏览: 24
好的,以下是一个简单的示例代码,可以绘制一个简单的柱状图:
首先,在你的布局xml文件中添加一个自定义View:
```xml
<com.example.myapplication.BarChartView
android:id="@+id/barChartView"
android:layout_width="match_parent"
android:layout_height="300dp" />
```
然后,在你的java文件中实现这个自定义View:
```java
public class BarChartView extends View {
private Paint mPaint;
private List<Bar> mBars;
public BarChartView(Context context) {
super(context);
init();
}
public BarChartView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public BarChartView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 初始化画笔
mPaint = new Paint();
mPaint.setColor(Color.BLUE);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setAntiAlias(true);
mPaint.setTextSize(20);
// 初始化柱状图数据
mBars = new ArrayList<>();
mBars.add(new Bar("Jan", 100));
mBars.add(new Bar("Feb", 200));
mBars.add(new Bar("Mar", 150));
mBars.add(new Bar("Apr", 300));
mBars.add(new Bar("May", 250));
mBars.add(new Bar("Jun", 180));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制坐标轴
mPaint.setColor(Color.BLACK);
canvas.drawLine(50, 250, 450, 250, mPaint);
canvas.drawLine(50, 250, 50, 50, mPaint);
// 绘制柱状图
float barWidth = (400 - mBars.size() * 10) / mBars.size();
for (int i = 0; i < mBars.size(); i++) {
Bar bar = mBars.get(i);
float left = 60 + i * (barWidth + 10);
float top = 250 - bar.getHeight();
float right = left + barWidth;
float bottom = 250;
canvas.drawRect(left, top, right, bottom, mPaint);
// 绘制柱状图上的文字
mPaint.setColor(Color.WHITE);
String text = bar.getLabel() + " " + bar.getValue();
float textWidth = mPaint.measureText(text);
float textX = left + (barWidth - textWidth) / 2;
float textY = top - 10;
canvas.drawText(text, textX, textY, mPaint);
}
}
private static class Bar {
private String label;
private float value;
public Bar(String label, float value) {
this.label = label;
this.value = value;
}
public String getLabel() {
return label;
}
public float getValue() {
return value;
}
public float getHeight() {
return value / 300 * 200;
}
}
}
```
这个自定义View会绘制一个包含6个柱状条的简单柱状图,并且每个柱状条都包含一个标签和一个值。你可以根据你的需求修改这个自定义View来绘制一个更加复杂的柱状图。