我使用SurfaceHolder回调让我可以使用此类访问绘图表面
class Display extends Page.Surface
{
public Display(Context c)
{
super(c,screens);
}
// ------------------------------------------------------------
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
log("surface "+holder.getSurfaceFrame());
buildFrontPage(width,height);
show();
}
}
其中Page.Surface是SurfaceView的一个相当标准的扩展,并实现了SurfaceHolder.CallBack,如下所示:
// --------------------------------------------------------------------
static class Surface extends SurfaceView implements SurfaceHolder.Callback
{
SurfaceHolder holder;
public Pages pages;
public Surface(Context context, Pages screens)
{
super(context);
holder=getHolder();
holder.addCallback(this);
pages=screens;
}
// ----------------------------------------------------------------
public void show()
{
Canvas c=null;
try {
c = holder.lockCanvas(null);
synchronized (holder) {
if((c!=null) && (pages!=null)) pages.draw(c);
}
} finally {
if (c != null) {
holder.unlockCanvasAndPost(c);
}
}
}
我还在我的主要活动中捕获了touchevents,使用:
// -------------------------------------------
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
super.dispatchTouchEvent(ev);
screens.handleTouchEvent(ev);
return true;
}
到目前为止,所有这些都很好,除了ev.getX()和ev.getY()返回的值是绝对值 - 覆盖了平板电脑的整个表面,并且回调中返回的画布不是' t开始直到菜单下方。 这意味着所有getY值都会被菜单的深度所取消。
有什么方法可以在我的工作画布开始的整个平板电脑表面找到这个点,所以我可以从getY值中减去它吗?