android - 如何在大于屏幕尺寸的 Canvas 上绘制并能够在 android 中水平和垂直滚动/平移?

标签 android graphics android-canvas android-scrollview

我正在寻找一个真实的例子,其中包含有关如何在大于屏幕尺寸的 Canvas 上绘制的示例代码(截至目前,我正在正常绘制并且无法查看外部屏幕尺寸)。更多的压力在于能够滚动/平移屏幕以查看整个 Canvas 。 如果需要更多信息,请发表评论。

更新:在这里找到我的答案 Image in Canvas with touch events

最佳答案

我的版本是从 Monodroid 转换过来的,但是实现应该看起来差不多。 (我试着把它放回 java,如果不准确,请见谅)

  1. 为了在屏幕外绘制,只要在任何你想画的地方画,它就会被绘制在屏幕外。诀窍是通过缩放和平移来查看它。要缩放 View ,您需要实现 ScaleGestureDetector.IOnScaleGestureListener 并实现 onScale 方法,如下所示。

  2. 对于平移,您只需要实现 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/

相关文章:

Android,适配器中的 RelativeLayout 导致错误

Android Studio 和 Gradle

java - 控制硬件功能

Apache HTTPD 配置可视化

pdf - 如何从 Google Docs 导出 PDF 而不会过度压缩标题中的图形

android - 更新到 Android Studio 0.6.0 后 Canvas.drawRect() 停止绘制

Android:传递 "Clicked"状态?

javascript - 三.JS,改变子3D对象的世界位置

java - 加载没有 OutOfMemoryError 的大图像

java - 如何清除我的 Canvas ?