Android, как объединить график с помощью библиотеки GraphView

Я хотел бы создать комбинированный горизонтальный и прокручиваемый график, как на изображении ниже, используя библиотеку GraphView:

введите здесь описание изображения

Как я могу это сделать, пожалуйста?

Большое спасибо за любой образец.


person redrom    schedule 11.09.2014    source источник


Ответы (1)


Я думаю, что вы не можете смешивать LineGraph с BarGraph в GraphView

Но несколько рядов в GraphView с разным цветом и возможностью прокрутки выглядят так: (Вам придется проделать некоторые трюки с областью просмотра, потому что, если отображается столбец, он расширяет область просмотра, чтобы поместиться на графике - его ширина равна 1 единице. .)

GraphView гистограмма с несколькими рядами

MainActivity.java

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GraphView graphView = new BarGraphView(this, "Graph Title");

    GraphViewData[] data1 = new GraphViewData[] {
            new GraphViewData(1, 5.0d),
            new GraphViewData(2, 3.0d),
            new GraphViewData(3, 4.0d),
            new GraphViewData(4, 3.0d),
            new GraphViewData(5, 7.0d),
            new GraphViewData(6, 6.0d),
            new GraphViewData(7, 7.0d),
            new GraphViewData(8, 2.0d),
    };
    GraphViewSeriesStyle style1 = new GraphViewSeriesStyle();
    style1.setValueDependentColor(new ValueDependentColor() {
        @Override
        public int get(GraphViewDataInterface data) {
            if(((int)data.getX())%2 == 0) {
                return Color.rgb(200, 60, 0);
            }
            else {
                return Color.rgb(60, 200, 0);
            }
        }
    });
    GraphViewSeries series1 = new GraphViewSeries("Series 1", style1, data1);

    graphView.setManualYAxisBounds(10,0);
    graphView.setViewPort(1,3.99999);
    graphView.setScrollable(true);
    graphView.addSeries(series1);
    LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
    layout.addView(graphView);
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<LinearLayout
    android:id="@+id/graph1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"></LinearLayout>

person Gyebro    schedule 11.09.2014
comment
Здравствуйте, спасибо за Ваш фрагмент. Вы знаете, как добавить поля между барами? - person redrom; 11.09.2014
comment
Вы можете попробовать разместить полосы со смещенными координатами x. new GraphViewData(1, 5.0d), new GraphViewData(2, 3.0d), new GraphViewData(3.5, 4.0d), new GraphViewData(4.5, 3.0d), new GraphViewData(6, 7.0d), ... Или попробуйте отредактировать сам исходник библиотеки и изменить там ширину полосы. - person Gyebro; 11.09.2014