如何在 PieChart 中设置字体大小?
How do I set font size in PieChart?
我们有一个带有饼图的 activity 页面。目前,每个段中的字体大小都非常小。
Our pie chart with its small font size
这是我们的代码:
package tech.pattullo.teamzero;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.PointF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import com.androidplot.pie.PieChart;
import com.androidplot.pie.PieRenderer;
import com.androidplot.pie.Segment;
import com.androidplot.pie.SegmentFormatter;
import com.androidplot.util.PixelUtils;
import java.util.List;
public class Statistics extends AppCompatActivity {
DatabaseHelper stats = new DatabaseHelper(this);
public static final int SELECTED_SEGMENT_OFFSET = 50;
private TextView donutSizeTextView;
private SeekBar donutSizeSeekBar;
public PieChart pie;
private Segment s1;
private Segment s2;
private Segment s3;
private Segment s4;
public Statistics() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_statistics);
Log.i("STATISTICS", "Switched to statistics panel.");
pie = (PieChart) findViewById(R.id.myPie);
final float padding = PixelUtils.dpToPix(30);
pie.getPie().setPadding(padding, padding, padding, padding);
pie.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
PointF click = new PointF(motionEvent.getX(), motionEvent.getY());
if (pie.getPie().containsPoint(click)) {
Segment segment = pie.getRenderer(PieRenderer.class).getContainingSegment(click);
final boolean isSelected = getFormatter(segment).getOffset() != 0;
deselectAll();
setSelected(segment, !isSelected);
pie.redraw();
}
return false;
}
private SegmentFormatter getFormatter(Segment segment) {
return pie.getFormatter(segment, PieRenderer.class);
}
private void deselectAll() {
List<Segment> segments = pie.getSeriesRegistry().getSeriesList();
for (Segment segment : segments) {
setSelected(segment, false);
}
}
private void setSelected(Segment segment, boolean isSelected) {
SegmentFormatter f = getFormatter(segment);
if (isSelected) {
f.setOffset(SELECTED_SEGMENT_OFFSET);
} else {
f.setOffset(0);
}
}
});
donutSizeSeekBar = (SeekBar) findViewById(R.id.donutSizeSeekBar);
donutSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
pie.getRenderer(PieRenderer.class).setDonutSize(seekBar.getProgress() / 100f,
PieRenderer.DonutMode.PERCENT);
pie.redraw();
updateDonutText();
}
});
donutSizeTextView = (TextView) findViewById(R.id.donutSizeTextView);
updateDonutText();
s1 = new Segment("s1", 3);
s2 = new Segment("s2", 1);
s3 = new Segment("s3", 7);
s4 = new Segment("s4", 18);
EmbossMaskFilter emf = new EmbossMaskFilter(
new float[]{1, 1, 1}, 0.4f, 10, 8.2f);
SegmentFormatter sf1 = new SegmentFormatter(this, R.xml.pie_segment_formatter1);
sf1.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf1.getFillPaint().setMaskFilter(emf);
SegmentFormatter sf2 = new SegmentFormatter(this, R.xml.pie_segment_formatter2);
sf2.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf2.getFillPaint().setMaskFilter(emf);
SegmentFormatter sf3 = new SegmentFormatter(this, R.xml.pie_segment_formatter3);
sf3.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf3.getFillPaint().setMaskFilter(emf);
SegmentFormatter sf4 = new SegmentFormatter(this, R.xml.pie_segment_formatter4);
sf4.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf4.getFillPaint().setMaskFilter(emf);
pie.addSegment(s1, sf1);
pie.addSegment(s2, sf2);
pie.addSegment(s3, sf3);
pie.addSegment(s4, sf4);
pie.getBorderPaint().setColor(Color.TRANSPARENT);
pie.getBackgroundPaint().setColor(Color.TRANSPARENT);
}
protected void updateDonutText() {
donutSizeTextView.setText(donutSizeSeekBar.getProgress() + "%");
}
private void getUserData() {
}
void displayStats() {
}
void analyzeData() {
}
String offerSuggestions() {
int number = 6;
String message;
if (number > 5)
message = "You should get out more!";
else
message = "Keep doing what you're doing!";
return message;
}
}
要添加一些细节,我们正在使用 com.androidplot.pie 库。我试着查看文档,但没有什么比设置字体大小更接近的了。我对此无能为力吗?
您应该能够通过设置 labelPaint.textSize
在您的段格式化程序的 xml 中设置字体大小
我们有一个带有饼图的 activity 页面。目前,每个段中的字体大小都非常小。
Our pie chart with its small font size
这是我们的代码:
package tech.pattullo.teamzero;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.PointF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import com.androidplot.pie.PieChart;
import com.androidplot.pie.PieRenderer;
import com.androidplot.pie.Segment;
import com.androidplot.pie.SegmentFormatter;
import com.androidplot.util.PixelUtils;
import java.util.List;
public class Statistics extends AppCompatActivity {
DatabaseHelper stats = new DatabaseHelper(this);
public static final int SELECTED_SEGMENT_OFFSET = 50;
private TextView donutSizeTextView;
private SeekBar donutSizeSeekBar;
public PieChart pie;
private Segment s1;
private Segment s2;
private Segment s3;
private Segment s4;
public Statistics() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_statistics);
Log.i("STATISTICS", "Switched to statistics panel.");
pie = (PieChart) findViewById(R.id.myPie);
final float padding = PixelUtils.dpToPix(30);
pie.getPie().setPadding(padding, padding, padding, padding);
pie.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
PointF click = new PointF(motionEvent.getX(), motionEvent.getY());
if (pie.getPie().containsPoint(click)) {
Segment segment = pie.getRenderer(PieRenderer.class).getContainingSegment(click);
final boolean isSelected = getFormatter(segment).getOffset() != 0;
deselectAll();
setSelected(segment, !isSelected);
pie.redraw();
}
return false;
}
private SegmentFormatter getFormatter(Segment segment) {
return pie.getFormatter(segment, PieRenderer.class);
}
private void deselectAll() {
List<Segment> segments = pie.getSeriesRegistry().getSeriesList();
for (Segment segment : segments) {
setSelected(segment, false);
}
}
private void setSelected(Segment segment, boolean isSelected) {
SegmentFormatter f = getFormatter(segment);
if (isSelected) {
f.setOffset(SELECTED_SEGMENT_OFFSET);
} else {
f.setOffset(0);
}
}
});
donutSizeSeekBar = (SeekBar) findViewById(R.id.donutSizeSeekBar);
donutSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
pie.getRenderer(PieRenderer.class).setDonutSize(seekBar.getProgress() / 100f,
PieRenderer.DonutMode.PERCENT);
pie.redraw();
updateDonutText();
}
});
donutSizeTextView = (TextView) findViewById(R.id.donutSizeTextView);
updateDonutText();
s1 = new Segment("s1", 3);
s2 = new Segment("s2", 1);
s3 = new Segment("s3", 7);
s4 = new Segment("s4", 18);
EmbossMaskFilter emf = new EmbossMaskFilter(
new float[]{1, 1, 1}, 0.4f, 10, 8.2f);
SegmentFormatter sf1 = new SegmentFormatter(this, R.xml.pie_segment_formatter1);
sf1.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf1.getFillPaint().setMaskFilter(emf);
SegmentFormatter sf2 = new SegmentFormatter(this, R.xml.pie_segment_formatter2);
sf2.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf2.getFillPaint().setMaskFilter(emf);
SegmentFormatter sf3 = new SegmentFormatter(this, R.xml.pie_segment_formatter3);
sf3.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf3.getFillPaint().setMaskFilter(emf);
SegmentFormatter sf4 = new SegmentFormatter(this, R.xml.pie_segment_formatter4);
sf4.getLabelPaint().setShadowLayer(3, 0, 0, Color.BLACK);
sf4.getFillPaint().setMaskFilter(emf);
pie.addSegment(s1, sf1);
pie.addSegment(s2, sf2);
pie.addSegment(s3, sf3);
pie.addSegment(s4, sf4);
pie.getBorderPaint().setColor(Color.TRANSPARENT);
pie.getBackgroundPaint().setColor(Color.TRANSPARENT);
}
protected void updateDonutText() {
donutSizeTextView.setText(donutSizeSeekBar.getProgress() + "%");
}
private void getUserData() {
}
void displayStats() {
}
void analyzeData() {
}
String offerSuggestions() {
int number = 6;
String message;
if (number > 5)
message = "You should get out more!";
else
message = "Keep doing what you're doing!";
return message;
}
}
要添加一些细节,我们正在使用 com.androidplot.pie 库。我试着查看文档,但没有什么比设置字体大小更接近的了。我对此无能为力吗?
您应该能够通过设置 labelPaint.textSize