2013-06-20 4 views
0

하나의 scrollview에 여러 그래프를 표시해야하는 Android 애플리케이션을 개발 중입니다. 자, 저는 linechart를 scrollview에 표시 할 수있게되었고 스크롤을 잘 할 수 있습니다. 그러나 차트를 위 또는 아래로 이동하는 데는 문제가있는 것으로 보입니다. 패닝 (panning)은 더듬 거리며 아주 잘 보이지 않으며 실제로는 거의 사용되지 않습니다.스크롤 차트에서 Achartengine linechart 패닝

이제 renderer.setInScroll (true)을 설정했습니다. 다른 모든 것은 잘 작동하는 것처럼 보입니다 (수평으로 패닝). 나는 이것이 linechart의 터치 이벤트를 방해하는 scrollview와 관련이 있다고 생각하지만, 안드로이드로는 나 자신을 이해하기에는 너무 새롭다.

내가 봤

, 나는 유사한 문제에 대한이 오래된 주제를 발견 HorizontalScrollView within ScrollView Touch Handling하지만 Achart에 적용 할 수 없습니다 : https://groups.google.com/forum/?fromgroups#!topic/achartengine/j6BIrZ8fm4k 항목의 사람은 그가이 그것을 해결했다.

다음은 테스트 차트의 관련 코드입니다. 그것은 (그것이 어떤 차이 만드는 경우에 조각에)에있는 ScrollView 안에있는 LinearLayout으로 설정됩니다 짧은

private XYMultipleSeriesDataset getDemoDataset() { 
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
    final int nr = 80; 
    Random r = new Random(); 
    for (int i = 0; i < SERIES_NR; i++) { 
     XYSeries series = new XYSeries("Demo series " + (i + 1)); 
     for (int k = 0; k < nr; k++) { 
      series.add(k, 20 + r.nextInt() % 100); 
     } 
     dataset.addSeries(series); 
    } 
    return dataset; 
} 

private XYMultipleSeriesRenderer getDemoRenderer() { 
    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
    renderer.setAxisTitleTextSize(12); 
    renderer.setChartTitleTextSize(12); 
    renderer.setLabelsTextSize(15); 
    renderer.setLegendTextSize(15); 
    renderer.setPointSize(5f); 
    renderer.setMargins(new int[] { 20, 30, 15, 10 }); 
    XYSeriesRenderer r = new XYSeriesRenderer(); 
    r.setColor(Color.BLACK); 
    r.setPointStyle(PointStyle.POINT); 
    r.setFillBelowLine(false); 
    r.setFillPoints(true); 
    renderer.addSeriesRenderer(r); 
    renderer.setInScroll(true); 
    setChartSettings(renderer); 
    return renderer; 
} 

private void setChartSettings(XYMultipleSeriesRenderer renderer) 
{ 
    renderer.setChartTitle("Chart demo"); 
    renderer.setXTitle("x values"); 
    renderer.setYTitle("y values"); 
    renderer.setApplyBackgroundColor(false); 
    renderer.setRange(new double[] {0,200,0,200}); 
    renderer.setFitLegend(false); 
    renderer.setAxesColor(Color.BLACK); 
    renderer.setMarginsColor(Color.WHITE); 
    renderer.setLabelsColor(Color.BLACK); 
    renderer.setShowGrid(true); 
    renderer.setXAxisMin(0); 
    renderer.setXAxisMax(200); 
    renderer.setYAxisMin(0); 
    renderer.setZoomEnabled(false); 
    renderer.setYAxisMax(200); 
    } 
... 
rpmGraph = ChartFactory.getLineChartView(getActivity(), getDemoDataset(), getDemoRenderer()); 
      LinearLayout layout = (LinearLayout) getActivity().findViewById(R.id.rpmGraph); 
      layout.addView(rpmGraph); 

질문 내가 얻을 수있는 방법이다는 A있는 ScrollView에서 제대로 수직으로 작동하는 패닝? 당신이 vertcal 스크롤 뷰에 하나 개 이상의 차트를 넣을 경우

+0

왜 스크롤뷰 내부에 있어야합니까? –

+0

동일한 메뉴에 여러 개의 그래프를 표시하고 사용자가 스크롤하여 그래프를 볼 수 있도록해야합니다. – Tumetsu

+0

여기 어떻게 스크롤 가능한 그래프를 그릴 수 있습니까? 어떤 생각이나 제안입니까? – CoDe

답변

0

후 귀하의 XNL 레이아웃이

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/rltMainLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    tools:context=".MainActivity" > 

    <ImageView 
     android:id="@+id/title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/bg_ttl_bar" 
     android:contentDescription="@string/app_name" /> 

    <ScrollView 
     android:id="@+id/scrlMainLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/title" 
     tools:context=".MainActivity" > 

     <LinearLayout 
      android:id="@+id/chart" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@android:color/white" 
      android:orientation="vertical" > 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/help_sel" 
       android:contentDescription="@string/app_name" /> 

      <LinearLayout 
       android:id="@+id/chart1" 
       android:layout_width="fill_parent" 
       android:layout_height="300dp" 
       android:orientation="vertical" > 
      </LinearLayout> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/help_sel" 
       android:contentDescription="@string/app_name" /> 

      <LinearLayout 
       android:id="@+id/chart2" 
       android:layout_width="fill_parent" 
       android:layout_height="300dp" 
       android:orientation="vertical" > 
      </LinearLayout> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/help_sel" 
       android:contentDescription="@string/app_name" /> 

      <LinearLayout 
       android:id="@+id/chart3" 
       android:layout_width="fill_parent" 
       android:layout_height="300dp" 
       android:orientation="vertical" > 
      </LinearLayout> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/help_sel" 
       android:contentDescription="@string/app_name" /> 

      <LinearLayout 
       android:id="@+id/chart4" 
       android:layout_width="fill_parent" 
       android:layout_height="300dp" 
       android:orientation="vertical" > 
      </LinearLayout> 
     </LinearLayout> 
    </ScrollView> 

</RelativeLayout> 

그리고 당신의 차트 multirenderer 설정은 다음과 같이해야한다 같아야합니다.

XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); 

      double[] range = {0 , 5 , 0 , 5}; 
      mRenderer.setMargins(marign); 
      mRenderer.setAxisTitleTextSize(axisTextSize); 
      mRenderer.setChartTitleTextSize(chartTextSize); 
      mRenderer.setLabelsTextSize(axisTextSize); 
      mRenderer.setLegendTextSize(legendTextSize); 
      // multiRenderer.setLegendHeight(40); 
      //when we dealing with one bar with one series , it is good to not deal with barSpacing() and setBarWidth() 
      //multiRenderer.setBarSpacing(-0.1); 
      //multiRenderer.setBarWidth((int)(context.getResources().getDimension(R.dimen.chart_bar_width))); 

      //multiRenderer.setBarWidth(50); 
      mRenderer.setAxesColor(Color.parseColor("#2c2c2c")); 
      mRenderer.setInitialRange(range, 1); 
      mRenderer.setXAxisMin(0.4); 
      mRenderer.setXAxisMax(6); 
      mRenderer.setXLabels(0); 
      //multiRenderer.setXAxisMax(15); 
      //multiRenderer.setYAxisMin(0); 
      mRenderer.setXLabelsAlign(Align.CENTER); 
      mRenderer.setYLabelsAlign(Align.RIGHT); 

      mRenderer.setPanEnabled(true,false); 
      mRenderer.setZoomEnabled(false, false); 
      mRenderer.setPanLimits(new double[]{0,18,0,0}); 
      mRenderer.setApplyBackgroundColor(true); 
      mRenderer.setMarginsColor(Color.WHITE); 
      mRenderer.setBackgroundColor(Color.argb(0x00, 0x01, 0x01, 0x01)); 
      //multiRenderer.setMarginsColor(Color.parseColor("#FF000000")); 

      mRenderer.setXTitle(getxTItle()); 
      mRenderer.setYTitle(getyTItle()); 
      mRenderer.setXLabelsPadding(10); 
      mRenderer.setYLabelsPadding(10); 
      mRenderer.setXLabelsColor(Color.parseColor("#2c2c2c")); 
      mRenderer.setYLabelsColor(0, Color.parseColor("#2c2c2c")); 
      mRenderer.setLabelsColor(Color.parseColor("#2c2c2c")); 
      mRenderer.setShowCustomTextGridY(true); 
      mRenderer.setGridColor(Color.parseColor("#2c2c2c")); 
      mRenderer.setPointSize(20.5f); 
      mRenderer.setInScroll(true);