안드로이드 개발 질문/답변
(글 수 45,052)
차트 기본 예제는 구했습니다 | 1 | 1 1 | 1 1 | ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ (1이 선으로 이어지는 (점인데 올래 잘안보여서 1로 썻음)) 이런모양으로 x값은 입력받을때마다 증가하게 해놓고 y값만 입력받은 값적용되게 (단 버튼을 눌러야함.. 챠트 == 그려집니다 입력받아서 add 누르면.. tcp통신으로 연결 까지되고 값도 가져옵니다 버튼안누르고 값이 오면 바로 차트를 그리개 할려고하는데.. 어떤함수를 쓴느것같기도하고.. 어떻게 해야할지 잘모르겟습니다~ 도와주세요~~ 소스올려 놓을개요 통신도 됨 지금은 어떻게 하면 바로 통신으로 연결된 값이 입력되서 챠트를 그릴수 있는지좀... add 버튼안누르고... private final static String IP = "192.168.100.40"; private Socket socket; //소켓 private InputStream in; //입력 스트림 private OutputStream out; //출력 스트림 private final Handler handler = new Handler(); //핸들러 private String txtReceive; // 수신 텍스트
private GraphicalView mChartView; double x= 0; double y = 0;
// @Override
protected void onRestoreInstanceState(Bundle savedState) {
super.onRestoreInstanceState(savedState);
mDataset = (XYMultipleSeriesDataset) savedState.getSerializable("dataset");
mRenderer = (XYMultipleSeriesRenderer) savedState.getSerializable("renderer");
mCurrentSeries = (XYSeries) savedState.getSerializable("current_series");
mCurrentRenderer = (XYSeriesRenderer) savedState.getSerializable("current_renderer");
mDateFormat = savedState.getString("date_format");
}
// @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("dataset", mDataset);
outState.putSerializable("renderer", mRenderer);
outState.putSerializable("current_series", mCurrentSeries);
outState.putSerializable("current_renderer", mCurrentRenderer);
outState.putString("date_format", mDateFormat);
}
// @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
current = this;
setContentView(R.layout.xy_chart);
// mX = (EditText) findViewById(R.id.xValue);
mY = (EditText) findViewById(R.id.yValue);
mAdd = (Button) findViewById(R.id.add);
mNewSeries = (Button) findViewById(R.id.new_series);
mNewSeries.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String seriesTitle = "Series " + (mDataset.getSeriesCount() + 1);
XYSeries series = new XYSeries(seriesTitle);
mDataset.addSeries(series);
mCurrentSeries = series;
XYSeriesRenderer renderer = new XYSeriesRenderer();
mRenderer.addSeriesRenderer(renderer);
mCurrentRenderer = renderer;
setSeriesEnabled(true);
//스레드 생성 2
(new Thread()
{
public void run()
{
try{
connect(IP,4443);
}catch(Exception e)
{
}
}
}).start();
}
//접속
private void connect(String IP, int port)
{
int size;
byte[] w = new byte[1024];
txtReceive = "";
try{ //소켓 접속 3
socket = new Socket(IP, port);
in = socket.getInputStream();
out = socket.getOutputStream();
//수신 반복 루프 4
while(socket != null && socket.isConnected())
{ //데이터 수신 5
size = in.read(w);
if(size <= 0) continue;
txtReceive = new String(w,0,size,"UTF-8");
handler.post(new Runnable() {
// @Override
public void run() {
mY.setText(txtReceive);
try {
// x = Double.parseDouble(mX.getText().toString());
x += 1;
} catch (NumberFormatException e) {
// TODO
// mX.requestFocus();
return;
}
try {
y = Double.parseDouble(mY.getText().toString());
} catch (NumberFormatException e) {
// TODO
mY.requestFocus();
return;
}
mCurrentSeries.add(x, y);
// mX.setText("");
mY.setText("");
// mX.requestFocus();
if (mChartView != null) {
mChartView.repaint();
}}
});
// TODO Auto-generated method stub
}
}catch(Exception e)
{
handler.post(new Runnable() {
// @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("통신에러");
}
});
}
}
});
mAdd.setOnClickListener(new View.OnClickListener() {
//double x = 1;
public void onClick(View v) {
try {
// x = Double.parseDouble(mX.getText().toString());
x += 1;
} catch (NumberFormatException e) {
// TODO
// mX.requestFocus();
return;
}
try {
y = Double.parseDouble(mY.getText().toString());
} catch (NumberFormatException e) {
// TODO
mY.requestFocus();
return;
}
mCurrentSeries.add(x, y);
// mX.setText("");
mY.setText("");
// mX.requestFocus();
if (mChartView != null) {
mChartView.repaint();
}
}
});
}
public static void showDialog(final Activity activity, String title, String text)
{
AlertDialog.Builder ad = new AlertDialog.Builder(activity);
ad.setTitle(title);
ad.setMessage(text);
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
// TODO Auto-generated method stub
activity.setResult(Activity.RESULT_OK);
}
});
ad.create();
ad.show();
}
// @Override
protected void onResume() {
super.onResume();
if (mChartView == null) {
FrameLayout layout = (FrameLayout) findViewById(R.id.chart);
mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);
layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
boolean enabled = mDataset.getSeriesCount() > 0;
setSeriesEnabled(enabled);
} else {
mChartView.repaint();
}
}
private void setSeriesEnabled(boolean enabled) {
// mX.setEnabled(enabled);
// mX.setEnabled(enabled);
mY.setEnabled(enabled);
mAdd.setEnabled(enabled);
}
}
2010.11.30 07:07:09
(추천:
1 / 0)
View 를 상속한 클래스에서 그려야 합니다.
mChartView 클래스에 doDraw(datatype data...); 와 같은 메소드를 정의해서
통신으로 데이터를 받을 때마다 mChartView.doDraw 메소드를 호출해 줍니다.
mChartView.doDraw 메소드는 두 가지 방법으로 구현할 수 있는데요.
첫째는 mChartView 클래스에서 새로 만든 Canvas 에 그리는 방법이 있고(Apidemos 의 Sensors.java 참고)
아니면 데이터만 배열이나 버퍼에 저장한 다음 invalidate() 를 호출하여
나중에 onDraw 메소드에서 업데이트해서 그리는 방법도 있습니다.




통신까지되는데.. add버튼 없애면 값이 점이 되서 그래프가안그려져요~~