package com.android.test.draw;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.PathShape;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class testActivity extends Activity implements SensorEventListener {
CustomDrawableView mCustomDrawableView;
private SensorManager sensorManager;
float itt;
/* TextView outputX; */
// ////////////////////////////////////////////////////////////onCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCustomDrawableView = new CustomDrawableView(this);
setContentView(mCustomDrawableView);
/* setContentView(R.layout.main); */
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
/* outputX = (TextView) findViewById(R.id.TextView01); */
}
// //////////////////////////////////////////////////////////////센서값
@Override
protected void onResume() { // activity를 사용자에게 보여주고 사용자의 입력을 처리
super.onResume();
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
}
/*
* @Override protected void onStop() { // activity가 사용자에게 보여지지 않음
* super.onStop(); sensorManager.unregisterListener(this,
* sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)); }
*/
public void onSensorChanged(SensorEvent event) { // sensor event listener
synchronized (this) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
itt = event.values[0];
/* outputX.setText("x:" + event.values[0] + " m/s^2"); */
mCustomDrawableView.invalidate();
break;
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
// //////////////////////////////////////////////////////////
public class CustomDrawableView extends View {
private ShapeDrawable mDrawable;
Paint paint = new Paint();
Path path = new Path();
public void sleep(int time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
}
}
// ////////////////////////////////////////////////////////////
public CustomDrawableView(Context context) {
super(context);
int x = 10;
int y = 10;
int width = 300;
int height = 300;
mDrawable = new ShapeDrawable(new PathShape(path, 10, 10));
mDrawable.getPaint().setShader(
new LinearGradient(0, 0, 0, 10, 0xff00ff00, 0xffff0000,
TileMode.CLAMP));
mDrawable.setBounds(x, y, x + width, y + height);
paint.setColor(Color.WHITE);
path.moveTo(5, 0);
/*
* path.lineTo(0, 6); path.lineTo(4, 6); path.lineTo(4, 8);
* path.lineTo(6, 8); path.lineTo(6, 6); path.lineTo(8, 6);
*/
}
// ////////////////////////////////////////////////////////////Canvas
/*
* public class inner extends testActivity{ //
* ////////////////////////////////////////////////////////////sleep 구현
* // 메소드 public void sleep(int time) { try { Thread.sleep(time); }
* catch (InterruptedException e) { } }
*/
protected void onDraw(Canvas canvas) {
mDrawable.draw(canvas);
// 틀
paint.setColor(Color.BLUE);
canvas.drawLine(430, 430, 170, 430, paint);
paint.setColor(Color.GREEN);
canvas.drawLine(170, 430, 170, 205, paint);
// 값
paint.setColor(Color.YELLOW);
for (int i = 0; i < 10; i++)
{
canvas.drawLine(170 + (10 * i), 430, 170 + (i * 10), 430 - (itt * 15), paint);
this.sleep(0);
}
}
// ////////////////////////////////////////////////////////////
// }
}
}




drawLine을 반복문에 넣어 센서값에 따라 높이가 달라집니다. 문제는 이걸 시간 별로 하나씩 하고 싶은데 잘 안되는군요
예를 들면 10의 값을 받으면 첫번째 루프의 선이 하나 그려지고 그게 고정됩니다. 그리고 다음 루프에서 20을 받으면 20을 가진 선이 바로 옆에 그려져야합니다.
하지만 현재 상태는 센서값이 업데이트 될때마다 모든 선의 높이가 일정하고 오르내리락 한다는 겁니다 ...ㅠㅠ
구현을 어떻게 해야 될까요..