2012-07-12 6 views
0

Android 용 achartengine 차트 라이브러리가 좋지만 계속이 문제가 발생합니다. 버튼을 클릭 할 때 db에서 다른 데이터 세트에 대한 차트를 다시 그리는 작업이 필요합니다. 나는 차트와 함께 액티비티에 3 개의 버튼을 가지고있다 (차트가있는 listview 아래). 버튼을 누른 후에 버튼 뒤에 여분의 가비지 문자가 그려지는 것 외에는 모든 것이 작동합니다. 처음 버튼을 누를 때 발생하는 것은 아니지만 버튼을 누르면 (어떤 것이 든 상관 없습니다) 쓰레기가 나타납니다.Achartengine이 여분의 가비지 문자를 사용합니다.

내 레이아웃 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/chart" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:background="#000000"/> 

    <Button 
     android:id="@+id/oneMonth" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="25dp" 
     android:text="@string/OneMonth" /> 

    <Button 
     android:id="@+id/twoMonth" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="@string/TwoMonth" /> 

    <Button 
     android:id="@+id/threeMonth" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="25dp" 
     android:text="@string/ThreeMonth" /> 

</RelativeLayout> 

내 활동

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import org.achartengine.ChartFactory; 
import org.achartengine.GraphicalView; 
import org.achartengine.chart.PointStyle; 
import org.achartengine.model.TimeSeries; 
import org.achartengine.model.XYMultipleSeriesDataset; 
import org.achartengine.renderer.XYMultipleSeriesRenderer; 
import org.achartengine.renderer.XYSeriesRenderer; 
import android.app.Activity; 
import android.database.Cursor; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

public class Plot extends Activity{ 

/** Called when the activity is first created. */ 
    private XYMultipleSeriesDataset mDataset; 
    private XYMultipleSeriesRenderer mRenderer; 
    List<double[]> values = new ArrayList<double[]>(); 
    private GraphicalView mChartView; 
    private TimeSeries time_series; 
    private final String RANGE = "range"; 
    LinearLayout layout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.plot); 

     layout = (LinearLayout)findViewById(R.id.chart); 

     final Button set30 = (Button)findViewById(R.id.oneMonth); 
     final Button set60 = (Button)findViewById(R.id.twoMonth); 
     final Button set90 = (Button)findViewById(R.id.threeMonth); 

     set30.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 

       setUpChart(-30); 

      }}); 

     set60.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 

       setUpChart(-60); 

      }}); 



     set90.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 

       setUpChart(-90); 

      }}); 

     } 



    @Override 
    protected void onResume() { 

     super.onResume(); 
     setUpChart(-30); 
    } 

    private void fillData(int x) { 
     DataBaseHelper helper = new DataBaseHelper(this.getApplicationContext()); 
     helper.open(DataBaseHelper.READABLE); 

     Cursor cursor = helper.getDaysSoManyDaysInThePast(x); 

     if(cursor.getCount() != 0){ 
      DateFormat formatter ; 
      Date date = null; 
       formatter = new SimpleDateFormat(DataBaseHelper.DATE_FORMAT); 
      String s; 

      int dateCol = cursor.getColumnIndex("date"); 
      int caffCol = cursor.getColumnIndex("sum(mgCaffeine)"); 

      for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){ 

       s = cursor.getString(dateCol); 
       try { 
        date = (Date)formatter.parse(s); 

       } catch (ParseException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
       } 
       int caff = cursor.getInt(caffCol); 
       time_series.add(date, caff);    
      } 


     }else{ 
      Toast.makeText(this, "No data", Toast.LENGTH_SHORT).show(); 
     } 

     helper.close(); 
    } 

     private void setUpChart(int x){ 

      mDataset = new XYMultipleSeriesDataset(); 
      mRenderer = new XYMultipleSeriesRenderer(); 
      mRenderer.setAxisTitleTextSize(16); 
      mRenderer.setChartTitleTextSize(20); 
      mRenderer.setLabelsTextSize(15); 
      mRenderer.setLegendTextSize(20); 
      mRenderer.setPointSize(3f); 

      XYSeriesRenderer r = new XYSeriesRenderer(); 
      r.setColor(Color.GREEN); 
      r.setPointStyle(PointStyle.CIRCLE); 
      r.setFillPoints(true); 
      mRenderer.addSeriesRenderer(r); 
      mRenderer.setClickEnabled(true); 
      mRenderer.setSelectableBuffer(20); 
      mRenderer.setPanEnabled(true); 

      time_series = new TimeSeries("test"); 
      mDataset.addSeries(time_series); 

      fillData(x); 

      mChartView = ChartFactory.getTimeChartView(this, mDataset, mRenderer, 
       DataBaseHelper.DATE_FORMAT); 



     layout.removeAllViews(); 
     layout.addView(mChartView); 

    } 
} 

여기에 쓰레기 버튼의 하단 부분 뒤에 사진 입니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

나는 그것을 고치기위한 방법을 발견했다. - 버튼을 상대적으로 둘러싸고 차트에 50dp의 하단 여백이있는 선형 정렬을 준다.

0

다음 전화를 시도 할 수 있습니다.

mRenderer.setInScroll(true); 
+0

감사합니다. 활동에 추가보기를 추가 할 때 더 많은 쓰레기를 생성했을 때도 도움이되었습니다. –

관련 문제