ImageView에서보기를 만들었습니다. 이 이미지 뷰는 화면상의 볼입니다 (가속도 센서에 따라 다름). 지금 나는 어떻게 화면에 현재 positon을 얻을 수 있습니까? 왜냐하면 나는 공을 화면 밖으로 나오기를 원하지 않기 때문입니다. 같은 :현재 위치 얻기 ImageView
내 모든 코드 :
public class MainActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor accelerometer;
AnimatedView animatedView = null;
ShapeDrawable mDrawable = new ShapeDrawable();
public static int x;
public static int y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
animatedView = new AnimatedView(this);
setContentView(animatedView);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
x -= ((int) event.values[0])*4;
y += ((int) event.values[1])*4;
}
}
public class AnimatedView extends ImageView {
static final int width = 100;
static final int height = 100;
public AnimatedView(Context context) {
super(context);
// TODO Auto-generated constructor stub
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xffffAC23);
mDrawable.setBounds(x, y, x + width, y + height);
}
@Override
protected void onDraw(Canvas canvas) {
mDrawable.setBounds(x, y, x + width, y + height);
mDrawable.draw(canvas);
invalidate();
}
}
}
다른 질문, TYPE_ACCELEROMETER 또는 TYPE_GRAVITY을 사용하는 것이 좋습니다 하나?
더 많은 장치를 지원하고 싶습니다.
넌 X를 리턴 및 Y 기준 각각 좌표getTop()
및
getLeft()
함수를 호출하여 볼의 위치를 검색 할 수
개체의 크기를 고려하면 너비와 높이를 2로 나눌 수 있습니다. 그렇지 않으면 화면 밖으로 부분적으로 벗어납니다. –