xml파일에 "@+id/tv"라는 EditText와 "@+id/count"라는 TextView가 있고
자바소스는
package exam.manbo;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.EditText;
public class ManBoActivity extends Activity implements SensorEventListener {
EditText vi;
int count = 0;
String str = String.format("%d",count);
private long lastTime;
private float speed;
private float lastX;
private float x;
private static final int SHAKE_THRESHOLD = 800;
private static final int DATA_X = SensorManager.DATA_X;
private SensorManager sensorManager;
private Sensor accelerormeterSensor;
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
vi = (EditText)findViewById(R.id.tv);
vi.setText(str);
vi.setClickable(false);
vi.setFocusable(false);
super.onCreate(savedInstanceState);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerormeterSensor = sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
@Override
public void onStart() {
super.onStart();
if (accelerormeterSensor != null)
sensorManager.registerListener(this, accelerormeterSensor,
SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onStop() {
super.onStop();
if (sensorManager != null)
sensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long currentTime = System.currentTimeMillis();
long gabOfTime = (currentTime - lastTime);
if (gabOfTime > 100) {
lastTime = currentTime;
x = event.values[SensorManager.DATA_X];
speed = Math.abs(x - lastX) /
gabOfTime * 10000;
if (speed > SHAKE_THRESHOLD) {
count++;
str = String.format("%d", count);
vi.setText(str);
}
lastX = event.values[DATA_X];
}
}
}
}
이런식으로 x방향을만 움직이게 했습니다
버튼을 누르면 초기화되는 형식으로 xml에 버튼을 추가해서 자바소스로 버튼 지정을 하고 싶습니다.
어떤식으로 해야 할까요?? (저는 자바에다가 어떤순서로 버튼을 넣어야 하는지 계속 햇갈립니다....)
저 죄송한데 하라는대로 다 햇는데.... 밑에 소스 보여드릴께요 xml에 버튼만들고 나서
package exam.manbo;
import android.app.Activity;
import android.content.DialogInterface.OnClickListener;
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.Button;
import android.widget.EditText;
public class ManBoActivity extends Activity implements SensorEventListener {
EditText vi;
Button btn_reset;
int count = 0;
String str = String.format("%d",count);
private long lastTime;
private float speed;
private float lastX;
private float x;
private static final int SHAKE_THRESHOLD = 3700;
private static final int DATA_X = SensorManager.DATA_X;
private SensorManager sensorManager;
private Sensor accelerormeterSensor;
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
vi = (EditText)findViewById(R.id.tv);
vi.setText(str);
vi.setClickable(false);
vi.setFocusable(false);
btn_reset = (Button)findViewById(R.id.btn_reset);
super.onCreate(savedInstanceState);
btn_reset.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
count = 0;
str = String.format("%d", count);
vi.setText(str);
}
});
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerormeterSensor = sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
@Override
public void onStart() {
super.onStart();
if (accelerormeterSensor != null)
sensorManager.registerListener(this, accelerormeterSensor,
SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onStop() {
super.onStop();
if (sensorManager != null)
sensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long currentTime = System.currentTimeMillis();
long gabOfTime = (currentTime - lastTime);
if (gabOfTime > 100) {
lastTime = currentTime;
x = event.values[SensorManager.DATA_X];
speed = Math.abs(x - lastX) / gabOfTime * 10000;
if (speed > SHAKE_THRESHOLD) {
count++;
str = String.format("%d", count);
vi.setText(str);
}
lastX = event.values[DATA_X];
}
}
}
}
이런식으로 햇는데 저가 빨간줄 친부분이 오류가 나네요....왜이런거죠?? 임포트 선언 같은거 다햇는데...




xml에서 아래와 같이 버튼을 생성합니다.
<Button
android:id="@+id/btn_reset"
android:layout_width="70px" //사이즈는 원하는 사이즈대로 적당하게 하시면 됩니다.
android:layout_height="50px" //위와 같습니다.
android:text="초기화"
android:textStyle="bold"/>
같은 LenearLayout에 넣으셔도 되고 버튼을 여러개 만들실려면 새로 LinearLayout을 만들어 넣으셔도 됩니다.
java 소스에서는 아래와 같이 onCreate()에서 Layout에서 만들어진 button에 대한 event를 작성하시면 됩니다.
Button btn_reset; //선언 위치는 따로 말씀 안드려도 아시겠지요?
btn_reset = (Button)findViewById(R.id.btn_reset);
btn_reset.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
count = 0;
vi.setText(String.valueOf(count));
}
});
한가지 더 말씀 드리자면 count된 값 앞에 다른 값을 포함하고자 하는게 아니시라면
굳이 String str을 선언하여 라인낭비할 필요 없이 String.valueOf();를 사용하는 것이 더 깔끔하지 않을까요?
그냥 저만의 생각입니다^^ ㅋ 결과값은 같으니깐요~
혹여 지금 하신데로에서 소스 수정을 원치 않으시면
vi.setText(String.valueOf(count));
위와 같이 작성되어 있는 해당 부분을
기존에 작성하신것과 같이
str = String.format("%d", count);
vi.setText(str);
이렇게 작성하시면 됩니다.
소스에 대한 설명은 간단하다보니 다 이해하실꺼라 생각하고 설명을 붙이지 않았습니다.
필요한 답변이였는지 모르겠네요~ 좋은하루 되세요~!