【问题标题】:Pinch zoom for custom view捏缩放自定义视图
【发布时间】:2011-03-07 06:43:20
【问题描述】:

我已经创建了我的自定义视图,我想为我的自定义视图应用捏缩放。该怎么做?

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    Android 开发者博客上的这篇文章很好地涵盖了这个主题(向下滚动到 GestureDetectors 部分):

    Making Sense of Multitouch

    如果您只想实现捏合缩放,只需几行代码:

    private ScaleGestureDetector mScaleDetector;
    private float mScaleFactor = 1.f;
    
    public MyCustomView(Context mContext){
        //...
        //Your view code
        //...
        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        // Let the ScaleGestureDetector inspect all events.
        mScaleDetector.onTouchEvent(ev);
        return true;
    }
    
    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    
        canvas.save();
        canvas.scale(mScaleFactor, mScaleFactor);
        //...
        //Your onDraw() code
        //...
        canvas.restore();
    }
    
    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            mScaleFactor *= detector.getScaleFactor();
    
            // Don't let the object get too small or too large.
            mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));
    
            invalidate();
            return true;
        }
    }
    

    本文的其余部分涉及处理其他手势,但不使用它们的实现,您可以使用GestureDetector,就像上面代码中使用的 ScaleGestureDetector 一样。

    【讨论】:

    • 我已经完成了,但是如何拖动或滚动缩放视图
    • @sillyMistaker 关于平底锅,帖子的链接中对此进行了很好的解释。评论的内容太多了,但它仍然遵循相当简单的逻辑。
    • 如何在listview上实现这个?
    • 从来没有想过它会这么容易实现。谢谢!
    【解决方案2】:

    将您的视图放入ZoomView

    自定义视图可在此处https://github.com/Polidea/android-zoom-view 获得,简单、免费且非常有趣!

    【讨论】:

    • 有什么相关的文档吗?
    • 很好的例子,但它会导致很多无效调用。
    • 不幸的是,该项目在过去 6 个月内似乎没有处于活动状态。我在 15 天前提交了一个拉取请求来修复一个明显的错误,但我没有得到任何回应。
    • 你知道怎么用了吗?
    • 此 GitHub 存储库不再维护。
    【解决方案3】:

    此库允许您对自定义视图应用缩放和平移。它满足了我的需求:

    https://github.com/natario1/ZoomLayout

    【讨论】:

    • 太棒了,它帮了我很多;我正在努力缩放我的自定义 imageView,它的画布上有图纸。这个库真的为我解决了这个问题。感谢您提及!
    【解决方案4】:

    使用这个:

    Android ImageView 的实现支持缩放,通过各种触摸手势。

    https://github.com/chrisbanes/PhotoView

    【讨论】:

    • Photoview 只能在 ImageView 上正常工作,但没有得到由另一个类扩展的视图。请问如何使用CustomView。?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多