안드로이드 개발 질문/답변
(글 수 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버튼 없애면 값이 점이 되서 그래프가안그려져요~~