상대편으로부터 데이터값을 받아서 데이터값을 Y라고 생각하고 X는 일정한 간격으로 증가시키면서
파형을 그릴려고 하는 초보입니다.
그런데 값은 제대로 전달되는거 같습니다. logcat을 찍어보면
하지만 그래프가 아예 그려지지 않아서 계속 하다가 이렇게 질문을 올립니다.
이 부분은 값을 받아와서 그리는 부분입니다.
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas.setBitmap(mBitmap);
mCanvas.drawColor(Color.WHITE);
mWidth = w;
mHeight = h;
if (mWidth < mHeight) {
mMaxX = w;
} else {
mMaxX = w - 50;
}
mLastX = mMaxX;
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Canvas canvas) {
synchronized (this) {
if (mBitmap != null) {
canvas.drawPath(path, paint);
canvas.drawBitmap(mBitmap, 0, 0, null);
}
}
}
protected void drawGraph(byte[] data) {
float mPrevYpos = 50;
float x=0;
Log.e(TAG, "data1111: " + data);
int dataSize = data.length;
Log.e(TAG, "dataSize1111: " + dataSize);
float mYpos = 0;
paint.setColor(Color.RED);
path.moveTo(x, mPrevYpos);
for (int i = 0; i < data.length; i++){
mYpos = data[i];
Log.e(TAG, "mYpos22222: " + mYpos);
path.lineTo(i, mYpos);
Log.e(TAG, "i1111: " + i);
}
}
}
그리고 여기는 받아온 값을 형변환시켜주는 부분입니다.
private double UByte(byte b){
if(b<0) // if negative
return (double)( (b&0x7F) + 128 );
else
return (double)b;
}
여기는 버튼을 눌렀을경우 창에 그려주도록 실행하는 부분입니다.
byte [] data=mGraphView.data;
for(x=0; x<data.length; x++)
{
double fval = UByte(data[x]);
if(fval<0){
Toast.makeText(getApplicationContext(), "아직 정보가 들어오지 않았습니다.", Toast.LENGTH_SHORT).show();
}
else{
mGraphView.drawGraph(fval);
mHandler.sendEmptyMessage(1);
}
}




onDraw에서 drawGraph를 호출하게 바꾸셔야 합니다.
엑티비티에서는 데이터만 계산해서 넣어주고요...
그러니까...
mGraphView.drawGraph(fval);
이 부분에서 직접 그리는게 아니라
for문을 통해서 배열 전체를 만든 다음에
배열을 통째로 전달해 주고, drawGraph에서는 이미 가지고 있는 배열을 통해 그래프를 그리는형태로 만들어야 합니다.