Android 如果对象到达画布的边缘,请打开一个新活动。我该怎么做?
此代码来自bucky tutorial 128的Newboston网站。请根据需要查阅。 如果绿色的球击中画布的边缘,我希望它打开一个新的活动。如何编写此过程 公共类Accelerate extends活动实现SensorEventListener{Android 如果对象到达画布的边缘,请打开一个新活动。我该怎么做?,android,android-canvas,Android,Android Canvas,此代码来自bucky tutorial 128的Newboston网站。请根据需要查阅。 如果绿色的球击中画布的边缘,我希望它打开一个新的活动。如何编写此过程 公共类Accelerate extends活动实现SensorEventListener{ float x, y, sensorX, sensorY; float alpha; Bitmap ball; SensorManager sm; MyBringBackSurface ourSurfaceView; public class
float x, y, sensorX, sensorY;
float alpha;
Bitmap ball;
SensorManager sm;
MyBringBackSurface ourSurfaceView;
public class MyBringBackSurface extends SurfaceView implements Runnable {
SurfaceHolder ourHolder;
Thread ourThread = null;
boolean isRunning = false;
public MyBringBackSurface(Context context) {
// TODO Auto-generated constructor stub
super(context);
ourHolder = getHolder();
}
public void pause(){
isRunning = false;
while(true){
try {
ourThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
ourThread = null;
}
public void resume(){
isRunning = true;
ourThread = new Thread(this);
ourThread.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(isRunning){
if(!ourHolder.getSurface().isValid())
continue;
Canvas canvas = ourHolder.lockCanvas();
//canvas.drawRGB(2, 2, 100); blue
canvas.drawRGB(227, 168, 105); //Mango peach
//float centerX = canvas.getWidth()/2;
//float centerY = canvas.getHeight()/2;
float centerX = (canvas.getWidth()-ball.getWidth())/2;
float centerY = (canvas.getHeight()-ball.getHeight())/2;
canvas.drawBitmap(ball, centerX + sensorX*20, centerY + sensorY*20, null);
ourHolder.unlockCanvasAndPost(canvas);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size() != 0){
Sensor s = sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
sm.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL);
}
ball = BitmapFactory.decodeResource(getResources(), R.drawable.greenball);
x = y = sensorX = sensorY = 0;
ourSurfaceView = new MyBringBackSurface(this);
ourSurfaceView.resume();
setContentView(ourSurfaceView);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
sm.unregisterListener(this);
super.onPause();
}
@Override
public void onSensorChanged(SensorEvent e) {
// TODO Auto-generated method stub
try {
Thread.sleep(16);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
alpha = (float) 0.8;
sensorX = alpha*sensorX + (1-alpha)*e.values[0];
sensorY = alpha*sensorY + (1-alpha)*e.values[1];
//sensorX = e.values[0];
//sensorY = e.values[1];
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
}我假设您已经完成了计算和检查球是否击中画布边缘的工作。您只需要访问您的活动
Intent intent = new Intent(youmainactivity, yournewactivityclass.class);
startActivity(intent);
或者如果你有你的背景
Intent intent = new Intent((Activity) context,yournewactivityclass.class);
startActivity(intent);
不,我还需要知道如何检查球是否击中边缘。我会给你你需要做的,但不是确切的代码。你需要得到球的位置,并检查它是否为0(手机的左边缘)和y位置减去高度(手机的底部)。然后,如果球的位置+宽度等于手机的宽度(手机的右边缘),则球的y位置等于手机的高度(手机的顶部)