我正在寻找一个真实的例子,其中包含有关如何在大于屏幕尺寸的 Canvas 上绘制的示例代码(截至目前,我正在正常绘制并且无法查看外部屏幕尺寸)。更多的压力在于能够滚动/平移屏幕以查看整个 Canvas 。 如果需要更多信息,请发表评论。
更新:在这里找到我的答案 Image in Canvas with touch events
最佳答案
我的版本是从 Monodroid 转换过来的,但是实现应该看起来差不多。 (我试着把它放回 java,如果不准确,请见谅)
为了在屏幕外绘制,只要在任何你想画的地方画,它就会被绘制在屏幕外。诀窍是通过缩放和平移来查看它。要缩放 View ,您需要实现 ScaleGestureDetector.IOnScaleGestureListener 并实现 onScale 方法,如下所示。
对于平移,您只需要实现 onTouchEvent,无论如何缩放都是必需的。
private float _scaleFactor; private float _xoffset; private float _yoffset; @override public bool onScale(ScaleGestureDetector detector){ _scaleFactor *= detector.ScaleFactor; _scaleFactor = Math.Max(0.1f, Math.Min(_scaleFactor, 5.0f)); invalidate(); return true; } @override protected void onDraw(Canvas canvas){ super.onDraw(canvas); canvas.save(); canvas.scale(_scaleFactor, _scaleFactor);//for zoom canvas.translate(_xoffset, _yoffset);//for pan //DO NORMAL DRAWING HERE canvas.restore(); } @override public bool onTouchEvent(MotionEvent e){ switch (e.action){ case MotionEvent.ACTION_DOWN:{ _prevx = e.getX(); _prevy = e.getY(); } break; case MotionEvent.ACTION_UP:{ _xoffset += e.getX() - _prevx; _yoffset += e.getY() - _prevy; invalidate(); _prevx = e.getX(); _prevy = e.getY(); } break; } return _scaleGestureDetector.onTouchEvent(e); }
注意:此代码用于自定义 VIEW 对象 - 因此继承自 View 并实现 IOnScaleGestureListener
关于android - 如何在大于屏幕尺寸的 Canvas 上绘制并能够在 android 中水平和垂直滚动/平移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397829/