2012-10-25 2 views
3

나는이 사실을 거의 한 달 동안 갇혀 있습니다. 내 안드로이드 코드에서 'afreechart'를 사용하여 완벽한 차트를 가지고 있지만, 라이브러리는 아직 이미지로 차트를 내보내는 기능을 지원하지 않는 것 같습니다 ('jfreechart'를 기반으로하므로이 작업을 수행하므로).Android에서 차트를 이미지로 내보내기

차트의 뷰를 가져 와서 캔버스로 변환하고 비트 맵 라이브러리의 압축 기능을 사용하여 저장하려고했지만 결과적으로 완전히 검정색 이미지가 표시됩니다. 이 같은 방법을 시도하고 내 코드의 다른보기 (선형보기 및 relativelayout 같은 간단한보기) 작동합니다.

그 후 차트 활동의 스크린 샷을 만들고 그 활동을 닫으려는 루틴을 만들려고했습니다. 하지만 코드로 그렇게 할 수있는 방법을 찾지 못했습니다. 가장 가까운 것은 원숭이 러너와 함께했습니다.

그래서 나는이 아이디어를 포기하고 'kichart', 'achartengine'등과 같은 다른 라이브러리를 찾으려고했지만 아무도 그 일을하지 않는 것 같아요. 차트를 이미지로 내보내는 것이 그렇게 어렵지는 않을 것입니다 ... 어떤 아이디어입니까?

내가 레이아웃의 배경색을 설정할 때, 반환 된 이미지는 배경색이있는 전체 사각형이므로 차트가 아닌 레이아웃이 나타납니다.

내 코드 :

package com.kichart; 

import java.io.File; 
import java.io.FileOutputStream; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Bitmap; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.LinearLayout; 

public class Main extends Activity { 

    LinearLayout ll; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     float[] values = new float[] { 2.0f,1.5f, 2.5f, 1.0f , 3.0f }; 
     String[] verlabels = new String[] { "great", "ok", "bad" }; 
     String[] horlabels = new String[] { "today", "tomorrow", "next week", "next month" }; 
     GraphView graphView = new GraphView(this, values, "GraphViewDemo",horlabels, verlabels, GraphView.BAR); 

     ll = new LinearLayout(this); 
     ll.addView(graphView); 

     Draw2d d = new Draw2d(this); 
     setContentView(d); 

     //setContentView(graphView); 
    } 


    public class Draw2d extends View { 

     public Draw2d(Context context) { 
      super(context); 
      setDrawingCacheEnabled(true); 
     } 

     @Override 
     protected void onDraw(Canvas c) { 
      ll.setBackgroundColor(Color.WHITE); 
      ll.measure(MeasureSpec.getSize(ll.getWidth()), MeasureSpec.getSize(ll.getHeight())); 
      ll.layout(400, 400, 400, 400); 
      ll.draw(c); 

      try { 
       getDrawingCache().compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File("/mnt/sdcard/graph2.png"))); 
      } catch (Exception e) { 
       Log.e("Error--------->", e.toString()); 
      } 
      super.onDraw(c); 
     } 

    } 

} 

답변

3

당신은 수행하여보기에서 이미지 비트 맵을 얻을 수 있습니다 :

Bitmap bitmap; 
    chart.setDrawingCacheEnabled(true); 
    bitmap = Bitmap.createBitmap(chart.getDrawingCache()); 
    chart.setDrawingCacheEnabled(false); 

차트에 getDrawingCache를 호출 할 수 없습니다 경우 내부에 배치하려고 RelativeLayout 또는 이와 비슷한 레이아웃. 레이아웃에서 호출하십시오. 이미지가 여전히 검은 경우는 이미지로 저장할 수 있습니다 그 후

..

, 당신은 차트는 비트 맵을 얻기 전에 생성되어 있는지 확인해야합니다.

희망이 내가 문제가 차트 캡처하거나 문제가 역할 레이아웃 WTH 있었다면 있는지 배경색을 설정하려고 ... 당신이

여전히
+0

작동하지 않습니다 도움이 될 것입니다, 그리고 난 얻었다 이미지는 배경색을 나타냅니다. 나는 주제에 관한 나의 코드를 넣을 것이다. –

+0

나는 (내가 슬픈 것처럼) 문제가 있다고 생각한다 : 비트 맵이 생성되기 전에 그 비트 맵을 얻으려고한다. onCreate가 끝난 후에 만 ​​같은 문제가 생겼을 때 비트 맵을 얻을 수 있었다. 그래서, 당신은 그래프 뷰와 버튼으로 뷰를 만들 수 있으며, 버튼의 onClick에 대답을 게시 한 코드를 넣을 수 있습니다 (그래프 뷰가 생성되었는지 확인하기 위해) – Luciano

+0

남자! 진지하게, 나는 당신에게 감사하는 방법을 모른다. 나는 이것을 한 달 동안 붙들 았고, 정말 고마워! 그리고 늦은 대답에 대해 유감스럽게도, 이번 ​​주말에는 메모를하지 않았습니다 ... 감사합니다. 잘 했어요! =) –

관련 문제