Android 如果对象到达画布的边缘,请打开一个新活动。我该怎么做?

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

此代码来自bucky tutorial 128的Newboston网站。请根据需要查阅。

如果绿色的球击中画布的边缘,我希望它打开一个新的活动。如何编写此过程

公共类Accelerate extends活动实现SensorEventListener{

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位置等于手机的高度(手机的顶部)