現在、チャートを表示する必要があるアプリケーションを開発しており、アプリケーションでチャートを表示するために IguanaUI ツール セットを選択しています。
http://www.infragistics.com/products/android/
今、私はチャート自体をカスタマイズすることでいくつかの問題に直面しています.ここでは、現在の結果のスクリーンショットを達成することができました:
私の問題は次のとおりです。
オレンジ: Y 軸のラベルが「切れて」いて、全長が表示されていない場合。完全なラベルを表示したいと思います。(下からなぜか切れている0も含む)
緑:チャートの背景から黒い帯を取り除き、独自の背景画像を設定したいと考えています。
XML レイアウト ファイルのチャート オブジェクトに設定android:background
すると、背景がオブジェクト全体 (軸を含む) に設定され、黒い帯は削除されません。
画像を列領域のみに適用したい(軸なし)。
更新: 申請できることがわかりました:
dataChart.setGridDisplayType(GridDisplayType.NONE);
オブジェクトに追加しますが、これにより内側のグリッドだけでなく もDataChart
削除されます。Axis
UPDATE2:ChartFragment
チャートを作成するのは次のとおりです。
public class ChartFragment extends Fragment
{
private Tab tab;
private static final String TAG = ChartFragment.class.getSimpleName();
LinearLayout fragmetLayout, llParameterContainer;
private DataChart dataChart;
private List<String> categories;
private List<Float> column1;
private List<Float> column2;
private List<List<Float>> columnList;
TextView tabName;
public ChartFragment(Tab tab)
{
this.tab = tab;
}
/** (non-Javadoc)
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
*/
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (container == null) {
// We have different layouts, and in one of them this
// fragment's containing frame doesn't exist. The fragment
// may still be created from its saved state, but there is
// no reason to try to create its view hierarchy because it
// won't be displayed. Note this is not needed -- we could
// just run the code below, where we would create and return
// the view hierarchy; it would just never be used.
return null;
}
fragmetLayout = (LinearLayout)inflater.inflate(R.layout.chart_fragment_layout, container, false);
createData();
createChart();
createUI();
return fragmetLayout;
}
/*
private void createData() {
categories=new ArrayList<String>();
column1=new ArrayList<Float>();
column2=new ArrayList<Float>();
columnList = new ArrayList<List<Float>>();
Random random=new Random();
float value1=25.0f;
float value2=25.0f;
for(int i=0; i<20; ++i) {
value1+=2.0*(random.nextFloat()-0.5f);
value2+=2.0*(random.nextFloat()-0.5f);
categories.add(Integer.toString(i));
column1.add(value1);
column2.add(value2);
}
}
*/
private void createData()
{
categories=new ArrayList<String>();
column1=new ArrayList<Float>();
column2=new ArrayList<Float>();
columnList = new ArrayList<List<Float>>();
for (int i=0; i < tab.getChart().getChartMeasuresList().size(); i++)
{
//categories.add(Integer.toString(i)); //the x axis.
Measure tempMeasure = tab.getChart().getChartMeasuresList().get(i);
final int measureDataSize = tempMeasure.getMeasureData().size();
Log.d(TAG, "current tempMeasure: " + tempMeasure.getMeasureData().toString() + " with: "+ measureDataSize + " measure data items." );
for (int j=0; j < measureDataSize; j++)
{
if (i == 0)
{
categories.add(tempMeasure.getMeasureData().get(j).getLabel());
}
column1.add(Float.valueOf(tempMeasure.getMeasureData().get(j).getValue())); //column data
Log.d(TAG, "add value " + tempMeasure.getMeasureData().get(j).getValue() + " at label/category: "+ tempMeasure.getMeasureData().get(j).getLabel());
//column2.add(value2); //column2 data
}
columnList.add(column1);
column1=new ArrayList<Float>();
}
}
private void updateData() {
/*
Random random=new Random();
float value1=25.0f;
float value2=25.0f;
for(int i=0; i<categories.size(); ++i) {
value1+=2.0*(random.nextFloat()-0.5f);
value2+=2.0*(random.nextFloat()-0.5f);
column1.set(i, value1);
column2.set(i, value2);
}
*/
}
private void createChart() {
dataChart=(DataChart) fragmetLayout.findViewById(R.id.dataChart); // get the empty chart view from the activity layout
dataChart.setHorizontalZoomEnabled(true); // allow horizontal zooming
dataChart.setVerticalZoomEnabled(false); // don't allow vertical zooming
dataChart.setGridDisplayType(GridDisplayType.BACK);
dataChart.setBackgroundColor(getResources().getColor(R.color.light_gray));
// set up an x axis
CategoryXAxis categoryAxis=new CategoryXAxis();
categoryAxis.setVisibility(View.VISIBLE);
categoryAxis.setDataSource(categories); // tell the axis about the data table
Brush brush = categoryAxis.getLabelBrush();
categoryAxis.setLabelTextSize(20);
brush.setColor(Color.BLACK);
categoryAxis.setGap(1.0f);
categoryAxis.setLabelBrush(brush);
categoryAxis.setLabelFormatter(new CategoryAxis.LabelFormatter() {
public String format(CategoryAxis axis, Object item) {
return (String)item; // return the axis item as a string
}
});
//categoryAxis.setBrushes(Color.BLACK);
dataChart.scales().add(categoryAxis); // all axes must be added to the chart's scales collection
// set up a y axis
NumericYAxis valueAxis=new NumericYAxis();
valueAxis.setLabelTextSize(15);
valueAxis.labelAreaRect.set(30, 30, 30, 30);
valueAxis.setVisibility(View.VISIBLE);
Brush brush2 = valueAxis.getLabelBrush();
brush2.setColor(Color.BLACK);
valueAxis.setLabelBrush(brush2);
valueAxis.setMinimumValue(-10.0f);
// valueAxis.setMaximumValue(110.0f);
//valueAxis.setMinimumValue(0.0f); // the random data look much nicer with a fixed axis range
//valueAxis.setMaximumValue(50.0f); // the random data look much nicer with a fixed axis range
valueAxis.setLabelFormatter(new NumericAxis.LabelFormatter() {
public String format(NumericAxis axis, float item, int precision) {
if(precision!=numberFormat.getMinimumFractionDigits()) {
numberFormat.setMinimumFractionDigits(precision); // set the formatting precision
numberFormat.setMaximumFractionDigits(precision); // set the formatting precision
}
return numberFormat.format(item); // return item as a string
}
final NumberFormat numberFormat=NumberFormat.getInstance(); // numeric formatter for axis values
});
dataChart.scales().add(valueAxis); // all axes must be added to the chart's scales collection
for (int i=0; i < columnList.size(); i++)
{
ValueCategorySeries series=new ColumnSeries();
series.setCategoryAxis(categoryAxis); // tell the series its x axis
series.setValueAxis(valueAxis); // tell the series its y axis
series.setValueMember(""); // tell the series the data rows are the values
Log.d(TAG, "setting serias_"+i+": "+columnList.get(i).toString());
series.setDataSource(columnList.get(i)); // tell the series the data table
dataChart.series().add(series); // add the series to the chart
}
/*
{
ValueCategorySeries series=new ColumnSeries();
series.setCategoryAxis(categoryAxis); // tell the series its x axis
series.setValueAxis(valueAxis); // tell the series its y axis
series.setValueMember(""); // tell the series the data rows are the values
series.setDataSource(column1); // tell the series the data table
dataChart.series().add(series); // add the series to the chart
}
{
ValueCategorySeries series=new ColumnSeries();
series.setCategoryAxis(categoryAxis); // tell the series its x axis
series.setValueAxis(valueAxis); // tell the series its y axis
series.setValueMember(""); // tell the series the data rows are the values
series.setDataSource(column2); // tell the series the data table
dataChart.series().add(series); // add the series to the chart
}
*/
}
private void createUI() {
Button updateButton=(Button) fragmetLayout.findViewById(R.id.updateButton);
updateButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
updateData();
for(Series series: dataChart.series()) {
series.notifyDataReset();
}
}
});
Button overlapButton=(Button) fragmetLayout.findViewById(R.id.overlapButton);
overlapButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
CategoryXAxis categoryAxis=(CategoryXAxis)dataChart.scales().get(0);
categoryAxis.setOverlap(2.0f*new Random().nextFloat()-1.0f);
}
});
Button gapButton=(Button) fragmetLayout.findViewById(R.id.gapButton);
gapButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
CategoryXAxis categoryAxis=(CategoryXAxis)dataChart.scales().get(0);
categoryAxis.setGap(new Random().nextFloat());
}
});
}
}
誰もこのツールの経験がありますか? それらのタスクを実行する方法を理解するために彼らのドキュメントを一日中探していましたが、これまでのところ結果はありません.
どんな助けでも大歓迎です。ありがとう。