从SurfaceView导航到代码中的其他视图

时间:2012-11-08 10:00:55

标签: android

我是经验丰富的iOS开发者,但对Android开发者来说是新手,并在这里询问一些新手问题......

我正在制作一个应用程序,它可以自定义绘制png和动画,并且根本没有标准的UI元素,我选择沿着SurfaceView路走下去。我还处理了SurfaceView代码中所触及的所有检测。

但是我如何在SurfaceView代码中处理视图之间的导航?我如何例如导航到名为QuizActivity的活动?在“正常”视图/活动中,我这样做:

Intent intent = new Intent(getBaseContext(), QuizActivity.class);
startActivity(intent);

但我无法从SurfaceView中访问getBaseContext和startActivity,即使我在同时加载多个视图时也会这样做?

结论:如何在我的SurfaceView中手动实现此导航?

谢谢
索伦

1 个答案:

答案 0 :(得分:2)

从您的表面视图中调用:

    Intent intent = new Intent(getContext(), QuizActivity.class);
    getContext().startActivity(intent)

每个视图都有对它们正在运行的上下文的引用,并且上下文总是可以启动新的活动,服务,获取资源等。

修改

在您的表面视图中

包括:

    private SurfaceCallbacks listener;

    public interface SurfaceCallbacks{
       public void onTouch(/* any data you want to pass to the activity*/);
    }

    public void registerSurfaceCallbacksListener(SurfaceCallbacks l){
       listener = l;
    }

    // and then whenever the surface being touched and you want to call something outside of the surface you do:

    if(listener!=null)
       listener.onTouch(/* pass the parameters you declared on the interface */);

并且在保存曲面的活动上执行此操作:

    public ActivityThatHoldsSurface extends Activity implements SurfaceCallbacks{

       // that comes form the surface
       @Override
       onTouch(/* your parameters */){
          // do the navigation stuff
       }

       // and immediately after you inflate or instantiate your surface you do:
       mySurface.registerSurfaceCallbacksListener(ActivityThatHoldsSurface.this);

    }

有意义???